@Autowired注解注入对象和bean实现Aware接口来注入对象功能上有什么区别吗?
感觉写@Autowired注解比实现接口重写方法更便捷些,比如获取ApplicationContext对象,用@Autowired仅需在属性上加个注解,而用接口方式则需要实现ApplicationContextAware接口重写set方法。
1、@Autowired注解是根据类型注入的,而applicationContext.getBean("beanName")需要手动去获取,需要额外写代码,比如javax.annotation.PostConstruct这个注解来初始化,或者通过spring的org.springframework.beans.factory.InitializingBean接口来完成初始化等。
2、ApplicationContextAware它的作用是在bean初始化之后,获取spring的上下文,我们一般在业务代码里面写不同的策略模版,也是基于ApplicationContext来实现的,就比如A、B、C三个手机厂商,用户购买手机时选择厂商,我们一般不用策略模式的话,就是if-else,如果提供一个统一的接口,然后三个手机厂商分别去实现这个接口,然后对于的组件name就是厂商名,我们就可以根据用户选择厂商,通过上下文找到对应的组件,然后请求统一的接口。这样再来一个D厂商,只需要去实现这个接口即可,其它地方的代码都不需要任何改动。
Aware接口是spring的扩展机制吧,日常还是用@Autowired来自动装配
本质上都是spring框架的自动注入。
但是@Autowired能注入你想注入的任何类,而Aware接口只能注入特定的某些类。Aware一般用来注入spring上下文中的某些特殊类。
绝大部分你使用Aware,大概率都是触发时机实际过早,直接使用autowrite注入会丢失部分数据