1.通过注解将对象注入IOC容器
我们可以通过使用以下四个注解的任意一个将类快速注入到IOC容器中,而不必再去applicationContext中进行繁琐的配置:
@controller: org.springframework.stereotype.Controller
控制器,推荐添加在控制类上
@service: org.springframework.stereotype.Service
业务逻辑,推荐添加在业务接口类上
@repository: org.springframework.stereotype.Repository
存储库,推荐添加在对象类上
@component: org.springframework.stereotype.Component;
组件,给不属于以上三类的情况添加
注解是可以随意添加的,spring底层并不会去验证当前类是否与注解的意思一致,但是习惯上我们更推荐以上的分类方式,以便我们的后期维护
1.1.导入spring-aop-4.3.27.RELEASE.jar
注解注入的方式是依赖于spring-aop-4.3.27.RELEASE.jar的,否则会报错
Caused by: java.lang.NoClassDefFoundError:
org/springframework/aop/TargetSource
1.2.在类中使用以上4个注解中的任意一个将类注入到IOC中
1.3.引用context名称空间,并在applicationContext中添加自动组件扫描
在类上添加注解之后,我们需要告诉IOC容器哪些类是需要它为我们自动注入的,这时就需要使用context:component-scan标签将需要IOC容器自动扫描的包配置进来
<context:component-scanbase-package="com.hao.spring"></context:component-scan>
1.4.获取自动注入的bean对象
获取对象时
public class Test {
public static void main(String[] args) {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User)ac.getBean("user");
System.out.println(user);
}
}
自动注入的bean对象默认id为该类的类名首字母小写
2.使用注解注入对象时的属性配置
2.1.bean对象的id默认为类名首字母小写,可以使用@Repository(“newBeanName”)的方式修改bean的id
直接在注解后加@Repository(“newBeanName”)
2.2.自动注入的bean对象默认为单例模式,可以使用@Scope(value = “prototype”)修改bean的生成方式
当我们希望该对象为多例时可以使用@scope注解将该类声明为多例模式
@Scope(value = "prototype")
3.指定包扫描的排除规则
我们可以使用context:exclude-filter标签在进行基础包扫描时,根据type 指定的不同规则在expression 中配置相应的值,实现对bean对象的注入排除
<context:component-scan base- package="com.hao.spring">
<context:exclude-filter type="annotation" expression=""/>
</context:component-scan>
type包含共包含5个值,其中前两个是比较常用的
annotation: 根据注解排除,在expression中配置该注解的全类名后,该类型会排除标注了配置注解的类
<context:component-scan base-package="com.hao.spring">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
assignable: 根据类名排除,在expression中配置需要排除类的全类名后,该类型会排除指定类的注入
<context:component-scan base-package="com.hao.spring">
<context:exclude-filter type="assignable" expression="com.hao.spring.user.User"/>
</context:component-scan>
aspectj: 根据aspectj表达式排除
custom: 自定义一个typeFilter
regex: 根据正则排除
4.指定包扫描的包含规则
我们可以使用context:include-filter标签在进行基础包扫描时,根据type 指定的不同规则在expression 中配置相应的值,实现对bean对象的指定注入
include和exclude的属性值时完全一样的,只是我们在指定引用时,需要先将包扫描的默认引用规则关闭,否则还是会将全部的对象注入进来,因为默认是全部注入