首先说明一下 完全可以在加载的时候注入进去 完全没必要自己手动注入,这篇文章就是自己闲没事写的

spring 有一个核心的类 DefaultListableBeanFactory,在他的一级缓存里边存放了我们需要的一切,我们可以从这里边获取bean对象,也可以手动注入bean对象

//无需使用注解注入
public class Compont2 {}
@Component
public class ContextAware implements ApplicationContextAware {
	@Autowired
	DefaultListableBeanFactory beanFactory;

	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		Class<? extends Compont2> c2 = Compont2.class;
		beanFactory.createBean(c2);
		String name = c2.getName();
		BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(c2);
		beanFactory.registerBeanDefinition(name, beanDefinitionBuilder.getBeanDefinition());
	}
}
@Component
public class ContextInitializingBean1 implements InitializingBean{
    @Autowired
	Compont2 compont2;
	public void afterPropertiesSet(){
		System.out.println("ContextInitializingBean1   "+compont2);
	}
}
@Component
public class ContextInitializingBean2 implements InitializingBean{
    @Autowired
	Compont2 compont2;
	public void afterPropertiesSet(){
		System.out.println("ContextInitializingBean2   "+compont2);
	}
}
控制台输出
ContextInitializingBean1   com.com.Compont2@2c6ee758
ContextInitializingBean2   com.com.Compont2@2c6ee758

为了更直观的展示注入,请看下边demo
创建基础的实体和service层

@Data
@EqualsAndHashCode(callSuper = false)
@TableName("user_info")
@Accessors(chain = true)
@ApiModel(value="UserInfo对象", description="")
public class UserInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("name")
    private String name;
    @TableField("age")
    private Integer age;
    @TableField("addr")
    private String addr;
}
public interface UserInfoMapper extends BaseMapper<UserInfo> {}
public interface UserInfoService extends IService<UserInfo> {}
@Service
public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements UserInfoService {}

创建没有注入spring的对象

public class UserBean {
    @Autowired
    private UserInfoService userInfoService;
    @GetMapping("save")
    public void save(){
        UserInfo userInfo = new UserInfo();
        userInfo.setAge(18).setAddr("青岛").setName("方圆师兄");
        userInfoService.save(userInfo);
    }
}

创建一个注入到spring的对象

@RestController
public class OrderController {
    @Autowired
    private DefaultListableBeanFactory defaultListableBeanFactory;

    @GetMapping("getbean")
    public Object getBean(String name) throws Exception{
        Class<?> clazz = Class.forName(name);
        Object factoryBean = defaultListableBeanFactory.getBean(clazz);
        return factoryBean;
    }
    @GetMapping("savebean")
    public void saveBean(String name) throws Exception{
        Class<?> clazz = Class.forName(name);
        defaultListableBeanFactory.createBean(clazz);
        defaultListableBeanFactory.registerBeanDefinition(clazz.getName(), BeanDefinitionBuilder.genericBeanDefinition(clazz).getBeanDefinition());
    }
    @GetMapping("save2")
    public void save2(){
        UserBean userbean = (UserBean)defaultListableBeanFactory.getBean(UserBean.class);
        userbean.save();
    }
}

1、开始注入bean
在这里插入图片描述2、查看注入情况
在这里插入图片描述
3、调用注入bean的save方法
在这里插入图片描述
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐