Spring IOC 常用注解
注册注解处理器
? 方式一:bean
- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
? 方式二: 命名空间<context:annotation-config />
<context:annotationconfig /> 将隐式地向Spring 容器注册AutowiredAnnotationBeanPostProcessor 、CommonAnnotationBeanPostProcessor 、 PersistenceAnnotationBeanPostProcessor 以及RequiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor 。
? 方式三: 命名空间<context:component-scan />
如果要使注解工作,则必须配置component-scan ,实际上不需要再配置annotation-config。
- <context:component-scan base-package="com.spring.ioc5">
- <!-- annotation 通过注解来过滤 org.example.SomeAnnotation
- assignable 通过指定名称过滤 org.example.SomeClass
- regex 通过正则表达式过滤 org\.example\.Default.*
- aspectj 通过aspectj表达式过滤 org.example..*Service+
- -->
- <context:include-filter type="regex" expression="com.spring.ioc5.*"/>
- <context:exclude-filter type="annotation" expression="org.springframework.beans.factory.annotation.Autowired"/>
- </context:component-scan>
? Spring 支持以下4 种类型的过滤方式:
? 注解 org.example.SomeAnnotation 将所有使用SomeAnnotation 注解的类过滤出来
? 类名指定 org.example.SomeClass 过滤指定的类
? 正则表达式 com.kedacom.spring.annotation.web..* 通过正则表达式过滤一些类
? AspectJ 表达式 org.example..*Service+ 通过AspectJ 表达式过滤一些类
Spring3的基于注解实现Bean依赖注入支持如下三种注解:
- Spring自带依赖注入注解: Spring自带的一套依赖注入注解;
- JSR-250注解:Java平台的公共注解,是Java EE 5规范之一,在JDK6中默认包含这些注解,从Spring2.5开始支持。
- JSR-330注解:Java 依赖注入标准,Java EE 6规范之一,可能在加入到未来JDK版本,从Spring3开始支持;
- JPA注解:用于注入持久化上下文和尸体管理器。
@Required
? 例如
- @required
- public setName(String name){}
@Autowired 采用byType的方式
- @Autowired
- private ISoftPMService softPMService;
- @Autowired(required=false)
- 构造器、字段、方法
@Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常。与@Resource 的区别在于,@Resource 允许通过bean 名称或bean 类型两种方式进行查找@Autowired(required=false) 表示,如果spring 上下文中没有找到该类型的bean 时, 才会使用new SoftPMServiceImpl();
@Autowired 标注作用于 Map 类型时,如果 Map 的 key 为 String 类型,则 Spring 会将容器中所有类型符合 Map 的 value 对应的类型的 Bean 增加进来,用 Bean 的 id 或 name 作为 Map 的 key。
@Autowired 还有一个作用就是,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。
@Qualifier 和@AutoWired联合使用,自动装配的策略就变成byName
使用@Autowired 时,如果找到多个同一类型的bean,则会抛异常,此时可以使用 @Qualifier("beanName"),明确指定bean的名称进行注入,此时与 @Resource指定name属性作用相同。
- @Qualifier(value = "限定标识符")
- 字段、方法、参数
(1)根据基于XML配置中的<qualifier>标签指定的名字进行注入,使用如下方式指定名称
- <qualifier type="org.springframework.beans.factory.annotation.Qualifier" value="限定标识符"/>
- @Autowired
- //根据<qualifier>标签指定Bean限定标识符
- public void initDataSource(@Qualifier("mysqlDataSource") DataSource dataSource) {
- this.dataSource = dataSource;
- }
- <bean id="mysqlDataSourceBean" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <qualifier value="mysqlDataSource"/>
- </bean>
(2)缺省的根据Bean名字注入:最基本方式,是在Bean上没有指定<qualifier>标签时一种容错机制,即缺省情况下使用Bean标识符注入,但如果你指定了<qualifier>标签将不会发生容错。
- @Autowired
- @Qualifier(value = "mysqlDataSource2")
//指定Bean限定标识符
- //@Qualifier(value = "mysqlDataSourceBean")
相关文章
servlet中取到Spring配置
转自:http://blog.csdn.net/sd_lichangyou/archive/2006/10/25/1350519.aspx ------------------------------...
IOC容器,其实很简单
前几天看easyjweb代码,看到容器那块,顺便自己也写了个简单的IOC容器练练手。今天正好有时间就写出来大家看看,我也好冒充一下高手。 这是个很简单的IOC容器,基本功能有:自动加载所...
Spring OpenSessionInView
OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个...