spring(四)之基于注解(Annotation-based)的配置
来源:互联网 发布:dian团队 知乎 编辑:程序博客网 时间:2024/06/06 05:35
- 注解
- Autowired
- 可以用于传统的setter 方法
- 用于以属性为参数多个参数的方法
- 用于构造器与字段
- ApplicationContext
- - 用于集合类型
- Maps
- 缺省情况
- Qualifier注解
- 创建您自定义的限定器注解
- 定义一个注解时提供Qualifier注解
- 然后将这个自定义的限定器与参数用于自动连接的字段
- 提供信息给候选的 bean 的定义
- Resource a
- PostConstruct 与 PreDestroy
- POSTconstruct说明
- preconstruct说明
- Autowired
注解
这里讲的注解有下面几个
- @Autowired
- @Qualifier(” “)
- @Genre(” “)
- @Offline
- @Resource(name=” “)
- @PostConstruct
- @PreDestroy
基础的配置文件,要写配置文件可以在下面写,这个文件是通用的。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <!-- 在这里写配置文件的内容 --></beans>
@Autowired
@Autowired 注解
可以用于“传统的”setter 方法
public class SimpleMovieLister { private MovieFinder movieFinder; @Autowired public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ...}
用于以属性为参数/多个参数的方法
- -
public class MovieRecommender { private MovieCatalog movieCatalog; private CustomerPreferenceDao customerPreferenceDao; @Autowired public void prepare(MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) { this.movieCatalog = movieCatalog; this.customerPreferenceDao = customerPreferenceDao; } // ...}
用于构造器与字段
public class MovieRecommender { @Autowired private MovieCatalog movieCatalog; private CustomerPreferenceDao customerPreferenceDao; @Autowired public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) { this.customerPreferenceDao = customerPreferenceDao; } // ...}
ApplicationContext
- 也可以是一种提供来自ApplicationContext的特殊类型的所有 beans,注解字段或者方法
public class MovieRecommender { @Autowired private MovieCatalog[] movieCatalogs; // ...}
- 用于集合类型
public class MovieRecommender { private Set<MovieCatalog> movieCatalogs; @Autowired public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) { this.movieCatalogs = movieCatalogs; } // ...}
Maps
- Maps 也可以这样注解,只要这个 Map 的 key 类型为 String。这个 Map 的 values 应该是已知的类型,并且 keys 应该包含符合 bean 的命名
public class MovieRecommender { private Map<String, MovieCatalog> movieCatalogs; @Autowired public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) { this.movieCatalogs = movieCatalogs; } // ...}
缺省情况
在缺省情况下,当出现0个候选的 beans时自动连接将失败;缺省行为把连接方法,构造器,字段假设为 required 的依赖。
public class SimpleMovieLister { private MovieFinder movieFinder; @Autowired(required=false) public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } // ...}
虽然当 一个类只有一个连接构造器时它将被标记为 required, 但是还是可以标记多个构造器的。在这种情况下,每一个构造器都有可能被认为是连接构造器, Spring 将会把依赖关系能够满足的构造器认为是greediest 的构造器。
@Qualifier注解
因为通过类型的自动连接可能会有多个候选,因此经常需要在选择过程中加以控制。一种方法去完成这个控制就是使用@Qualifier注解。
public class MovieRecommender { @Autowired @Qualifier("mainCatalog") private MovieCatalog movieCatalog; // ...}
@Qualifier注解也能够被指定为构造器的参数或者方法的参数:
public class MovieRecommender { private MovieCatalog movieCatalog; private CustomerPreferenceDao customerPreferenceDao; @Autowired public void prepare(@Qualifier("mainCatalog") MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) { this.movieCatalog = movieCatalog; this.customerPreferenceDao = customerPreferenceDao; } // ...}
创建您自定义的限定器注解。
定义一个注解时提供@Qualifier注解
@Target({ElementType.FIELD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Qualifierpublic @interface Genre { String value();}
然后将这个自定义的限定器与参数用于自动连接的字段
public class MovieRecommender { @Autowired @Genre("Action") private MovieCatalog actionCatalog; private MovieCatalog comedyCatalog; @Autowired public void setComedyCatalog(@Genre("Comedy") MovieCatalog comedyCatalog) { this.comedyCatalog = comedyCatalog; } // ...}
提供信息给候选的 bean 的定义
添加标签作为标签的子元素,然后指定’type’还有’value’以匹配您的自定义限定器注解。类型必须匹配注解的全名,或者是一个不危险的、方便一点的名字,您也可以使用“短” 类名。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <bean class="example.SimpleMovieCatalog"> <qualifier type="Genre" value="Action"/> <!-- inject any dependencies required by this bean --> </bean> <bean class="example.SimpleMovieCatalog"> <qualifier type="example.Genre" value="Comedy"/> <!-- inject any dependencies required by this bean --> </bean> <bean id="movieRecommender" class="example.MovieRecommender"/></beans>
@Resource ##a
Spring 也提供了使用 JSR-250 bean 属性支持的注射方式。
对于Spring 托管的对象 Spring 可以以这种方式支持映射
@Resource有一个‘name’属性,缺省时,Spring 将这个值解释为要注射的 bean 的名字。换句话说,如果遵循by-name的语法
public class SimpleMovieLister { private MovieFinder movieFinder; @Resource(name="myMovieFinder") public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; }}
如果没有显式地给出名字,缺省的名字将继承于字段名或者 setter 方法名:如果是字段名,它将简化或者等价于字段名;如果是 setter 方法名,它将等价于 bean 属性名。
public class SimpleMovieLister { private MovieFinder movieFinder; @Resource public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; }}
注解提供的名字将被BeanFactory解析为 bean 名。
@PostConstruct 与 @PreDestroy
从javaee5规范开始,servlet增加了两个影响servlet生命周期的注解(annotation):@PostConstruct 与 @PreDestroy。这两个注解用来修饰一个非静态的void()方法:而且这个方法不能抛出异常声明。
当一个方法带有这些注解之一时,将被在其生命周期与 Spring 生命周期接口的方法或者显式声明回调方法同一刻上调用。
public class CachingMovieLister { @PostConstruct public void someMethod() { // populates the movie cache upon initialization... } @PreDestroy public void someMethod() { // clears the movie cache upon destruction... }}
@POSTconstruct说明
被@POSTconstruct修饰的方法会在服务器加载servlet的时候运行,并且被服务器调用一次,类似于Servlet的init()方法。被@POSTconstruct修饰的方法会在构造函数之后,init方法之前调用运行。
@preconstruct说明
被@precontruct修饰的方法会在服务器卸载servlet的时候运行,并且只会被服务器调用一次,类似于servlet的destroy()方法。被@precontruct修饰的的方法会在destroy()方法之后运行,在servlet被彻底卸载之前。
- spring(四)之基于注解(Annotation-based)的配置
- 基于注解(Annotation-based)的配置
- Hibernate(四)基于注解annotation的配置
- spring-基于注解(Annotation)的配置(转)
- Spring框架 基于注解配置(四)
- Spring-Bean之基于注解(Annotation)装配解析
- spring-基于注释(Annotation)的配置
- spring-基于注释(Annotation)的配置
- Struts2基于注解Annotation的零配置开发(一)
- Struts2基于注解Annotation的零配置开发(二)
- Struts2基于注解Annotation的零配置开发(三)
- Spring 4.0 基于注解(Annotation)的配置和理解
- spring注解基于Annotation的依赖注入配置笔记
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- 实现基于注解(Annotation)的数据库框架(四)注解(Annotation)和反射的结合使用
- Spring(四)基于注解配置IOC容器&基于注解实现声明式事务
- Spring(四)基于注解配置IOC容器&基于注解实现声明式事务
- 刷CCF的算法题(第三天)
- edittext添加内容发生变化的监听
- [LeetCode]230. Kth Smallest Element in a BST
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- linux中的iptables服务
- spring(四)之基于注解(Annotation-based)的配置
- java Proxy
- ubuntu下无/etc/syslog.conf
- Android 仿美团网,大众点评购买框悬浮效果之修改版
- hdu 2527 huffmancode
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Python scrapy 安装与开发
- 欢迎使用CSDN-markdown编辑器
- Android 带你从源码的角度解析Scroller的滚动实现原理