Spring注释与简化配置

来源:互联网 发布:上瘾网络剧被删镜头 编辑:程序博客网 时间:2024/05/16 14:16

  在Spring 2.5及以后的版本中,提供了注释和命名空间来简化Spring的配置。下面是一些常用配置分享。


1、@Autowired注释

  以前给一个Bean配置属性时,Bean必须配置<property name="propName" ref="beanId"/>,然后在Java文件,还必须增加属性propname的getter和setter方法。
有了@Autowired注释后,我们可以简化配置文件和getters和setters方法。
- 1)注释属性

@Autowiredprivate BeanClassName propName;

  当然,我们还必须告诉Spring容器,当它启动时,就去扫描所有的Bean,然后自动注入。

<!-- 对具有@Autowired注释的Bean进行注入 --><bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

我们也可以注释构造函数和方法。

  • 2)注释构造函数
@Autowiredpublic MainBean(PropBeanA propBeanA, PropBeanB propBeanB){this.propBeanA = propBeanA;this.PropBeanB = PropBeanB ;}
  • 3)注释方法
@Autowiredpublic void setPropBean(PropBean propBean) {this.propBean = propBean;}
  • 4)@Autowired的相关属性

  在默认情况下使用@Autowired注释进行自动注入时,Spring容器中匹配的候选Bean数目必须有且仅有一个。当Springp容器找不到一个匹配的Bean时(可能是没有配置该Bean或是Bean的属性名写错了),Spring容器将抛出BeanCreationException异常,并指出必须至少拥有一个匹配的Bean。

  • (1)当Bean是可选的,或是不能确定Bean一定有,可以用@Autowired(required = false),这样在找不到匹配Bean 时也不报错,该属性默认为true。
  • (2)与上面的相反,当Bean有多个时,我们可以通过@Qualifier(“beanId”)还唯一确定一个所引用的Bean,与@Autowired配合使用,它也有三种使用的地方。

2、@Component注释

  虽然我们可以通过@Autowired在Bean类中使用自动注入功能,但是Bean还是在XML文件中通过进行定义的,通过@Component注释可以实现无需在配置文件中配置Bean的目的。

import org.springframework.stereotype.Component;@Componentpublic class BeanClassNameA {// ......}使用@Autowired@Componentpublic class BeanClassNameB {@Autowiredprivate BeanClassNameA propBeanA;// ......}

  因为没有配置,我们必须告诉Spring容器启用类扫描机制并自动注入了:

前面的AutowiredAnnotationBeanPostProcessor可以去掉了,这行的作用后面介绍。
- 1)@Component有个可选参数,指定Bean的名称@Component(“beanId”)
- 2)与@Component配合使用,可以通过@Scope指定Bean的作用范围,比如:@Scope(“prototype”)

3、其他注释

  Spring除了提供@Component注释外,还定义了几个注释:@Repository、@Service 和 @Controller。
在目前的Spring 2.5中,这3个注释和@Component是等效的,但是从注释类的命名上,很容易看出这3个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这3个注释和@Component相比没有什么新意,但Spring将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service和 @Controller对分层中的类进行注释,而用@Component对那些比较中立的类进行注释。

4、<context:annotation-config />

将隐式地向Spring容器注册 AutowiredAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessorPersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。

5、<context:component-scan base-package="......" />

通过,Spring会递归扫描类注释。
具体的说明可以参考:http://springindepth.com/book/annotation-based-bean-config-ioc-container-configuration.html

6、JavaEE应用@Controller

在使用SpringMVC中,可以通过@Controller简化配置

@Controller@RequestMapping("/welcome.htm")public class SomeNameController {@RequestMapping(method = RequestMethod.GET)public void doGet(ModelMap model, WebRequest request) {// ...}}

关于@Controller,在以后的文章中介绍,敬请关注。

7、简化配置文件

对于属性,我们一般都是通过以下配置的:

<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>简化之后为:<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource" />

使用方法介绍,我相信就没必要了,注意这两种方式可以一起使用的。

8、命名空间

  在以上的

<?xml version="1.0" encoding="GBK"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"default-autowire="byName">

XSD文件版本小技巧:不要增加版本(如直接使用spring-context.xsd),当然要加也是spring-context-2.5.xsd

由于介绍内容比较多,感觉都比较空,还有一些没有介绍具体:
- (1)JavaEE的注释,主要是@Controller;
- (2)JPA注释,@Entity,@Table;
- (3)JSR-250的注释,@Resource、@PostConstruct、@PreDestroy等。

下面贴出我的Spring配置文件的内容。

<?xml version="1.0" encoding="GBK"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"default-autowire="byName"><!-- Activates annotation-based bean configuration --><context:component-scan base-package="com.alipay.common" /><!-- DataSource --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/work_shop?useUnicode=true&amp;characterEncoding=UTF-8" /><property name="username" value="root" /><property name="password" value="manager" /></bean><!-- SqlMapClient --><bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="configLocations"><list><value>classpath:sqlmap/sqlmap-config.xml</value></list></property></bean><!-- SqlMapClientDAO --><bean id="sqlMapClientDAO" abstract="true" p:dataSource-ref="dataSource"p:sqlMapClient-ref="sqlMapClient" /><!-- TransactionTemplate --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource" /><!-- TransactionManager --><bean id="mockTransactionTemplate"class="org.springframework.transaction.support.TransactionTemplate"p:transactionManager-ref="transactionManager" /><!-- DAO --><bean id="siteUserDAO" class="com.alipay.dal.ibatis.IbatisSiteUserDAO"parent="sqlMapClientDAO" /><!-- END OF DAO --><!-- MANAGER --><bean id="siteUserManager" class="com.alipay.biz.manager.impl.SiteUserManagerImpl" /><!-- END OF MANAGER --><!-- FACADE--><!-- END OF FACADE--><!-- OSGI SERVICE--><!-- END OF OSGI SERVICE--></beans>
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 重庆市住房公积金管理中心 渭南住房公积金查询 咸阳市住房公积金管理中心 宁德住房公积金查询 苏州住房公积金管理中心 太原住房公积金 萍乡市住房公积金个人查询 深圳住房公积金查询余额 长春市住房公积金网 潍坊市住房公积金管理中心 阜阳市住房公积金查询 赣州住房公积金 太原住房公积金查询个人账户 郑州市住房公积金查询 杭州住房公积金管理中心 乐山市住房公积金管理中心 长春住房公积金查询 青海住房公积金查询网 住房公积金管理 宜春住房公积金查询 惠州市住房公积金管理中心 玉林住房公积金查询个人账户 枣庄住房公积金查询 六安住房公积金管理中心 厦门住房公积金查询 渭南市住房公积金个人查询 乐山住房公积金查询个人账户 深圳住房公积金电话多少 南宁住房公积金查询 住房公积金查询电话12329 济宁住房公积金管理中心 宁德市住房公积金查询窗口 兰州市住房公积金查询系统 孝感住房公积金查询 兰州住房公积金查询 滁州住房公积金 上海住房公积金网 个人住房公积金查询网 省住房公积金管理中心 韶关市住房公积金管理中心 长沙住房公积金管理中心