无论选择是什么 , Spring 都能容纳这两种风格 , 甚至可以将它们混合在一起 。值得指出的是 , 通过它的 JAVA 配置选项 , Spring 允许注解以一种非入侵的方式使用 , 不触碰目标组件源码和那些工具 , 所有的配置风格由 Spring 工具套件支持 。
基于注解的配置提供了一种 XML 设置的可替代方式 , 它依赖于字节码元数据来连接组件 , 而不是用尖括号声明的方式 。代替使用 XML 来描述 bean 连接 , 开发者通过将注解使用在相关的类 , 方法或字段声明中 , 将配置移动到了组件类本身的内部 。正如在“Example: The
RequiredAnnotationBeanPostProcessor”那节提到的那样 , 使用BeanPostProcessor与注解结合是扩展 Spring IoC 容器的的常见方法 。例如 , Spring 2.0 引入了@Required注解来执行需要的属性的可能性 。Spring 2.5 使以同样地通用方法来驱动 Spring 的依赖注入变为可能 。本质上来说 , @Autowired提供了如 3.4.5 小节描述的同样的能力 。“Autowiring collaborators”但更细粒度的控制和更广的应用性 。Spring 2.5 也添加对 JSR-250 注解的支持 , 例如 , @PostConstruct和@PreDestroy
。Spring 3.0 添加了对 JSR-330 , 包含在javax.inject包内的注解(Java 的依赖注入)的支持 , 例如@Inject和@Named 。关于这些注解的细节可以在相关的小节找到 。
【关于 Spring 注解容器配置的那些事,掌握这几点,不再难】
注解注入在 XML 注入之前进行 , 因此对于通过两种方法进行组装的属性后者的配置会覆盖前者 。
跟以前一样 , 你可以作为单独的 bean 定义来注册它们 , 但也可以通过在一个基于 XML 的 Spring 配置(注入包含上下文命名空间)中包含下面的标签来隐式的注册它们:
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
context:annotation-config/
</beans>
(隐式注册的后处理器包括
AutowiredAnnotationBeanPostProcessor ,
CommonAnnotationBeanPostProcessor ,
PersistenceAnnotationBeanPostProcessor和前面提到的
RequiredAnnotationBeanPostProcessor 。)
<3.9.1 @Required@Required注解应用到 bean 属性的 setter 方法上 , 例子如下:
context:annotation-config/>仅在定义它的同样的应用上下文中寻找注解的 beans 。这意味着 , 如果你在一个为DispatcherServlet服务的WebApplicationContext中放置了<context:annotation-config/> , 它只能在你的控制器中寻找@Autowired注解的 beans , 而不是在你的服务层中 。更多信息请看 18.2 小节 , “The DispatcherServlet” 。
public class SimpleMovieLister {private MovieFinder movieFinder;@Requiredpublic void setMovieFinder(MovieFinder movieFinder) {this.movieFinder = movieFinder;}// ...}
这个注解仅仅是表明受影响的 bean 属性必须在配置时通过显式的 bean 定义或自动组装填充 。如果受影响的 bean 属性没有填充 , 容器会抛出一个异常 , 这允许及早明确的失败 , 避免NullPointerExceptions或后面出现类似的情况 。仍然建议你在 bean 类本身加入断言 , 例如 , 加入到初始化方法中 。这样做可以强制这些需要的引用和值 , 甚至是你在容器外部使用这个类的时候 。2 @Autowired
===========================================================================
在下面的例子中 JSR 330 的@Inject注解可以用来代替 Spring 的@Autowired注解 。
你可以将@Autowired注解应用到构造函数上 。
public class MovieRecommender {private final CustomerPreferenceDao customerPreferenceDao;@Autowiredpublic MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {this.customerPreferenceDao = customerPreferenceDao;}// ...}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- SpringCloud入门简述
- 关于同意成立登记,山西省茶业商会5月10日成立,茶业
- 蜂蜜柚子茶的做法,关于蜂蜜柠檬柚子茶的做法
- 关于普洱茶先容,普洱茶名茶珍藏金瓜贡茶先容
- 关于春茶二三事,菊花茶的做法
- 文中关于月球的起源的三种 关于月球的形成和演化
- 灰翅鸫叫声 白喉短翅鸫的鸣叫期
- Python 为什么用 # 号作注释符?
- 补水|关于肤质|对付油敏皮的毛孔问题,得先搞定这个!
- 关于生肖茶你知道多少,黄山毛峰冲泡水温温度多少合适