springboot 手动注入bean
首先说明一下完全可以在加载的时候注入进去完全没必要自己手动注入,这篇文章就是自己闲没事写的spring有一个核心的类DefaultListableBeanFactory里边存放了我们需要的一切,我们可以从这里边获取bean对象,也可以手动注入bean对象@Componentpublic class ContextAware implements ApplicationContextAware {@
·
首先说明一下 完全可以在加载的时候注入进去 完全没必要自己手动注入,这篇文章就是自己闲没事写的
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方法
更多推荐
已为社区贡献4条内容
所有评论(0)