基于注解配置的IoC和基于xml配置文件配置的IoC效果和目的都是一样的,都是为了解耦,只是换了一种方式而已。
注解分类
用于创建对象的
@Component
作用:相当于在spring的xml配置文件中写了一个bean标签。
属性:
- value:用于指定bean的id。当不写时,默认值是当前类名首字母改小写。例如:accountServiceImpl
由此衍生的三个注解:
- @Controller:一般用于业务层
@Service:一般用于表现层
@Repository:一般用于持久层
他们的作用以及属性和@Component完全一样。他们的出现是spring框架为我们提供更明确的语义化来指定不同层的bean对象。
用于注入数据的
用于注入其他bean类型的
@Autowired
- 作用:自动按照类型注入。根据要注入的数据的数据类型去容器中寻找,只要容器中有唯一类型匹配,则可以自动注入。
- 如果有多个类型匹配,会先按照类型找到符合条件的对象,然后再用变量名作为bean的id,从容器中继续查找,如果找到则仍可以注入成功,否则报错
- 当使用此注解注入时,set方法就可以省略了。
- 属性:
- required:是否必须注入成功。默认值为true,没有匹配的对象就报错
@Qualifier
- 作用:在自动按照类型注入的基础之上,再按照bean的id注入。在给类成员注入时,它不能独立使用。
- 属性:
- value:用于指定bean的id
@Resource
- 作用:直接按照bean的id注入,由J2EE提供,需要导入包javax.annotation.Resource,去mvn仓库下载jar包即可。
- 属性:
- name:用于指定bean的id
以上三个注解都只能用于注入其他bean类型,而不能注入基本类型和String
用于注入基本类型和String类型的
@Value
- 作用:注入基本类型和String类型数据。
- 属性:
- value:用于指定要注入的数据,它支持SpringEL表达式。
- spring的el表达式:${表达式}
用于改变作用范围的
@Scope
- 作用:用于改变bean的作用范围,取值的范围和xml中的配置相同。
- 属性:
- value: 用于指定范围。
和生命周期相关的(了解)
@PostContruct
- 作用:用于指定初始化方法,和配置文件中init-method属性是一样的。
@PreDestroy
- 作用:用于指定销毁方法,和配置文件中destroy-method属性是一样的。
注解与XML比较
- 注解的优势: 配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。
- XML的优势: 修改时,不用改源码。不涉及重新编译和部署。
注:转载文章请注明出处,谢谢~