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容器注册 AutowiredAnnotationBeanPostProcessor
、CommonAnnotationBeanPostProcessor
、PersistenceAnnotationBeanPostProcessor
以及 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&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>
- Spring注释与简化配置
- Spring注释与简化配置
- Spring注释与简化配置
- Spring基本配置、注释与简化配置介绍(转)
- Spring结合Xbean简化与专业化配置
- Spring 事务简化配置
- Spring 事务简化配置
- Spring配置简化
- Spring简化配置
- spring注解简化配置
- 简化spring中的事务管理配置
- 简化spring中的事务管理配置
- 简化spring的事务配置
- Spring 事务简化配置(转)
- Leopard标签简化Spring配置
- Leopard标签简化Spring配置
- spring 定时任务配置简化
- spring mvc 注释配置
- AndroidStudio IDE主题不支持中文的解决办法
- 封锁阳光大学
- android 模拟因为内存使用不足,杀死应用的场景
- mysql on duplicate key update
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
- Spring注释与简化配置
- iOS开发中Swift和Objecttive-C的混合开发
- android 项目更改包名的方法
- 每天一个linux命令(3):pwd命令
- Git常用命令
- linux系统上安装LoadGenerator
- 传智播客黑马程序员就业骗局真相
- ECSHOP文章列表调用当前文章分类名
- MTK机器原始OTA更新方法