天天看点

spring(四)之基于注解(Annotation-based)的配置注解

<a href="#%E6%B3%A8%E8%A7%A3" target="_blank">注解</a>

<a href="#autowired" target="_blank">Autowired</a>

<a href="#%E5%8F%AF%E4%BB%A5%E7%94%A8%E4%BA%8E%E4%BC%A0%E7%BB%9F%E7%9A%84setter-%E6%96%B9%E6%B3%95" target="_blank">可以用于传统的setter 方法</a>

<a href="#%E7%94%A8%E4%BA%8E%E4%BB%A5%E5%B1%9E%E6%80%A7%E4%B8%BA%E5%8F%82%E6%95%B0%E5%A4%9A%E4%B8%AA%E5%8F%82%E6%95%B0%E7%9A%84%E6%96%B9%E6%B3%95" target="_blank">用于以属性为参数多个参数的方法</a>

<a href="#%E7%94%A8%E4%BA%8E%E6%9E%84%E9%80%A0%E5%99%A8%E4%B8%8E%E5%AD%97%E6%AE%B5" target="_blank">用于构造器与字段</a>

<a href="#applicationcontext" target="_blank">ApplicationContext</a>

<a href="#%E7%94%A8%E4%BA%8E%E9%9B%86%E5%90%88%E7%B1%BB%E5%9E%8B" target="_blank">- 用于集合类型</a>

<a href="#maps" target="_blank">Maps</a>

<a href="#%E7%BC%BA%E7%9C%81%E6%83%85%E5%86%B5" target="_blank">缺省情况</a>

<a href="#qualifier%E6%B3%A8%E8%A7%A3" target="_blank">Qualifier注解</a>

<a href="#%E5%88%9B%E5%BB%BA%E6%82%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E9%99%90%E5%AE%9A%E5%99%A8%E6%B3%A8%E8%A7%A3" target="_blank">创建您自定义的限定器注解</a>

<a href="#%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E6%B3%A8%E8%A7%A3%E6%97%B6%E6%8F%90%E4%BE%9Bqualifier%E6%B3%A8%E8%A7%A3" target="_blank">定义一个注解时提供Qualifier注解</a>

<a href="#%E7%84%B6%E5%90%8E%E5%B0%86%E8%BF%99%E4%B8%AA%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E9%99%90%E5%AE%9A%E5%99%A8%E4%B8%8E%E5%8F%82%E6%95%B0%E7%94%A8%E4%BA%8E%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%9A%84%E5%AD%97%E6%AE%B5" target="_blank">然后将这个自定义的限定器与参数用于自动连接的字段</a>

<a href="#%E6%8F%90%E4%BE%9B%E4%BF%A1%E6%81%AF%E7%BB%99%E5%80%99%E9%80%89%E7%9A%84-bean-%E7%9A%84%E5%AE%9A%E4%B9%89" target="_blank">提供信息给候选的 bean 的定义</a>

<a href="#resource-a" target="_blank">Resource a</a>

<a href="#postconstruct-%E4%B8%8E-predestroy" target="_blank">PostConstruct 与 PreDestroy</a>

<a href="#postconstruct%E8%AF%B4%E6%98%8E" target="_blank">POSTconstruct说明</a>

<a href="#preconstruct%E8%AF%B4%E6%98%8E" target="_blank">preconstruct说明</a>

这里讲的注解有下面几个

- @Autowired

- @Qualifier(” “)

- @Genre(” “)

- @Offline

- @Resource(name=” “)

- @PostConstruct

- @PreDestroy

基础的配置文件,要写配置文件可以在下面写,这个文件是通用的。

@Autowired 注解

-

也可以是一种提供来自ApplicationContext的特殊类型的所有 beans,注解字段或者方法

Maps 也可以这样注解,只要这个 Map 的 key 类型为 String。这个 Map 的 values 应该是已知的类型,并且 keys 应该包含符合 bean 的命名

  在缺省情况下,当出现0个候选的 beans时自动连接将失败;缺省行为把连接方法,构造器,字段假设为 required 的依赖。

  虽然当 一个类只有一个连接构造器时它将被标记为 required, 但是还是可以标记多个构造器的。在这种情况下,每一个构造器都有可能被认为是连接构造器, Spring 将会把依赖关系能够满足的构造器认为是greediest 的构造器。

  因为通过类型的自动连接可能会有多个候选,因此经常需要在选择过程中加以控制。一种方法去完成这个控制就是使用@Qualifier注解。

@Qualifier注解也能够被指定为构造器的参数或者方法的参数:

添加标签作为标签的子元素,然后指定’type’还有’value’以匹配您的自定义限定器注解。类型必须匹配注解的全名,或者是一个不危险的、方便一点的名字,您也可以使用“短” 类名。

  Spring 也提供了使用 JSR-250 bean 属性支持的注射方式。

  对于Spring 托管的对象 Spring 可以以这种方式支持映射

  @Resource有一个‘name’属性,缺省时,Spring 将这个值解释为要注射的 bean 的名字。换句话说,如果遵循by-name的语法

  如果没有显式地给出名字,缺省的名字将继承于字段名或者 setter 方法名:如果是字段名,它将简化或者等价于字段名;如果是 setter 方法名,它将等价于 bean 属性名。

注解提供的名字将被BeanFactory解析为 bean 名。

  从javaee5规范开始,servlet增加了两个影响servlet生命周期的注解(annotation):@PostConstruct 与 @PreDestroy。这两个注解用来修饰一个非静态的void()方法:而且这个方法不能抛出异常声明。

  当一个方法带有这些注解之一时,将被在其生命周期与 Spring 生命周期接口的方法或者显式声明回调方法同一刻上调用。

被@POSTconstruct修饰的方法会在服务器加载servlet的时候运行,并且被服务器调用一次,类似于Servlet的init()方法。被@POSTconstruct修饰的方法会在构造函数之后,init方法之前调用运行。

被@precontruct修饰的方法会在服务器卸载servlet的时候运行,并且只会被服务器调用一次,类似于servlet的destroy()方法。被@precontruct修饰的的方法会在destroy()方法之后运行,在servlet被彻底卸载之前。