/**
 @Required注解 适用于bean属性的setter方法
  这个注解仅仅表示,受影响的bean属性必须在配置的时候被填充,通过在bean定义或通过自动装配一个明确的属性值
  public class SimpleMovierListener{
  private MovieFinder movieFinder;
  @required
  public void setMovieFinder(MovieFinder movieFinder){
  this.movieFinder=movieFinder;
  }
  }
 @Autowired 注解为“传统” 的setter方法
  private MovieFinder movieFinder;
  @Autowired
  public void setMovieFinder(MovieFinder movieFinder){
  this.movieFinder=movieFinder;
  }
 
  可用于构造器或成员变量
  @Autowired
  private MovieCatalog movieCatalog;
  private CustomerPerferenceDao customerPerferenceDao;
  @Autowired
  public MovieRecommender(CustomerPerferenceDao customerPerferenceDao){
  this.customerPerferenceDao=customerPerferenceDao;
  }
 
  默认情况下,如果因为找不到合适的bean将会导致autowiring失败抛出异常,可以通过下面的方式避免
  public class SimpleMovierListener{
  private MovieFinder movieFinder;
  @Autowired(required=false)
  public void setMovieFinder(MovieFinder movieFinder){
  this.movieFinder=movieFinder;
  }
  }每个类只能有一个构造器被标记为required=true(每个类有很多的构造器,默认的required=false)
  @Autowired 的必要属性,建议使用@Required注解
  ***在service的实现类和dao的实现类上加上@Service和@Repository注解
  测试方法
  public void test(){
  InjectionService service = super.getBean("injectionServiceImpl")因为没有指定bean的名称,所以默认的名称是实现类的首字母小写
  }
  注入方式1:只有一个@Autowired注解
  @Autowired
  private InjectionDAO injectionDAO;
  public void save(String a){
  injectionDAO.save(a);
  }
 
  注入方式2:把@Autowired注解放在set方法上
  private InjectionDAO injectionDAO;
  @Autowired
  public void setInjectionDAO(InjectionDAO injectionDAO){
  THIS.injectionDAO=injectionDAO;
  }
 
  注入方式3:把@Autowired注解放在构造方法上
  private InjectionDAO injectionDAO;
  @Autowired
  public InjectionServiceImpl(InjectionDAO injectionDAO){
  this.injectionDAO=injectionDAO;
  }
 
 
  可以使用@Autowired注解那些中所周知的解析依赖性接口,比如BeanFactory,ApplicationContext,Environment,ResourceLoader,
  ApplicationEventPublisher,and MessageSource
  public class MovieRecommender{
  @Autowired
  private ApplicationContext context; 标注完可以直接使用了
 
  public MovieRecommender(){
 
  }
  }
  可以通过添加注解给需要该类型的数组(set,list)的字段或方法,以提供ApplicationContext中的所有特定类型的bean
  public Set<MovieCatalog> movieCatalogs;
  @Autowired
  public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs){
  所有set的泛型中声明的这种bean,也包括这个泛型的子类,都放到了这个集合中去了
  this.movieCatalogs=movieCatalogs;
  }
  可以用于装配key为String的Map
  public Map<String,MovieCatalog> movieCatalogs;
  @Autowired
  public void setMovieCatalogs(Map<String,MovieCatalog> movieCatalogs){
  这个key,即String表示的内容是所有的bean的id,value就是bean的对象
  this.movieCatalogs=movieCatalogs;
  }
  如果希望(放在set,list或mao)数组有序,可以让bean实现org.springframework.core.Ordered接口或使用@Order注解
 
  @Autowired 是由Spring BeanPostProcessor处理的,所以不能再自己的BeanPostProcessor或BeanFactoryPostProcessor类型
  应用这些注解,这些类型必须通过XML或者Spring的@Bean注解加载;这样会产生循环依赖
 
  数据及Map的自动注入
  创建一个接口,两个实现类,在两个接口上面加上@Component注解;然后创建一个测试类,这个测试类也用@Component注解
  然后在这个测试类里面写上下面的方法,在junit测试即可,打印了两个实现类的名字
  @Autowiried 这个东西确实能把接口的两个实现类放到list里面
  private List<BeanInterface> list;
  public void say(){
  if(null!=list&&list.size()!=0){
  for(BeanInterface bean:list){
  System.out.println(bean.getClass().getName());
  }
  }else{
  System.out.println("空的");
  }
  }
  @Autowiried
  private Map<String,BeanInterface> map; 这个String是bean的id
  if(map!=null&&map.size()!=0){
  for(Map.Entry<String,BeanInterface> entry:map.entrySet()){
  System.out.println(entry.getKey()+" "+entry.getValue().getClass().getName());
  }
  }else{
  System.out.println("空的");
  }
  如果需要排序,则在两个实现类上面再加一个@Order(1),也可以写成@Order(value=1),因为是两个实现类,所以这两个实现类在list里面是有顺序的,若第一个实现类加上@Order(1)则表示第一个实现类
  是list的第一个元素,若@Order(2)则表示这是list的第二个元素,但是这个order只对数组(set,list)有效,对map无效,即map的顺序不会变
 
 
  @Qualifier 注解 
  1:按类型自动装配可能多个bean实例的情况,也可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以用于指定单独的构造器参数或方法参数
  2:可用于注解集合类型变量
 
  public class MovieRecommender{
 
  @Autowiried
  @Qualifier("main") 可以用在成员变量和方法上
  private MovieCatalog movieCatalog;如果有多个MovieCatalog,指定使用bean的id为main的这个类
  }
  用在方法上
  public class MovieRecommender{
 
  private MovieCatalog movieCatalog;
  private CamerDao CamerDao;
  @Autowiried  指定要注入bean的id为main的这个类
  public void prepare(@Qualifier("main")MovieCatalog MmovieCatalog,CamerDao CamerDao){
  this.movieCatalog=movieCatalog;
  this.CamerDao=CamerDao;
  }
  }
  也可以在配置文件中使用Qualifier,即在xml中配置
  <bean class="com.zir.XXXXX">
  <qualifer value="main"/>
  </bean>
  1:如果通过名字进行注入,主要使用的不是@Autowired(即使在技术上能够通过@Qualifier指定bean的名字),替代方式是使用JSP-250标准的@Resource注解,她是通过其独特的名称来
  定义来识别特定的目标(这是一个与所声明的类型是无关的匹配过程)
  2:因语义差异,集合或Map类型的bean无法通过@Autowired来注入,因为没有类型匹配到这样的bean,为这些bean使用@Resource注解,通过唯一名称引用集合或Map的bean
  3:@Autowired适用于fields(字段),constructors(构造器),multi-argument methods(多参数的方法)这些允许在参数级别使用@Qualifier注解缩小范围的情况
  4:@Resource适用于成员变量,只有一个参数的setter方法,所以在目标是构造器或一个多参数方法时,最好的方法时使用qualifiers
  定义自己的qualifier注解并使用
  @Qualifier
  public @interface Gers{
  String value();
  }
  使用
  public class MovierUser{
  @Autowiried
  @Gers("Action")
  private MovieCatalog MmovieCatalog;
  private MovieCatalog two;
 
  @Autowiried 
  public void prepare(@Gers("main")MovieCatalog two){
  this.two=two;
  }
  }
  在xml中也可自定义注解
  <bean class="com.zir.AA">
  <qualifer type="Gener" value="main"/>
  </bean>
  <bean class="com.zir.AA">
  <qualifer type="com.Gener" value="comdy"/>
  </bean>
 */

Spring关于@required注解相关推荐

  1. Spring使用@Required注解依赖检查

    Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种情况,你需要 @Required ...

  2. Spring 基于注解(annotation)的配置之@Required注解

    从 Spring 2.5 开始就可以使用注解来配置依赖注入.注解连线在默认情况下在 Spring 容器中不打开.因此,在可以使用基于注解的连线之前,我们将需要在我们的 Spring 配置文件中启用它: ...

  3. springmvc3.2+spring+hibernate4全注解方式整合(一)

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  4. Spring Cache-缓存注解(二)

    文章目录 导读 概述 注解@Cacheable 和@CachePut 表达式值的引用 注解@CacheEvict 案例 导读 Spring-Cache手札 Spring Cache抽象-缓存注解 实战 ...

  5. Spring 3.0 注解注入详解

    Spring 3.0 注解注入详解 2011-04-15 09:44 17ZOUGUO ITEYE博客 我要评论(1) 字号:T | T AD: 一.各种注解方式 1.@Autowired注解(不推荐 ...

  6. spring dao层注解_Spring– DAO和服务层

    spring dao层注解 欢迎来到Spring教程的第三部分. 在这一部分中,我们将继续编写Timesheet应用程序,这次我们将实现DAO层,业务服务并编写一些测试. 在上一部分中,我们定义了Ge ...

  7. Spring自动装配----注解装配----Spring自带的@Autowired注解

    Spring自动装配----注解装配----Spring自带的@Autowired注解 父类 package cn.ychx;public interface Person {public void ...

  8. 近100个Spring/SpringBoot常用注解汇总!

    作者 | Guide 来源 | JavaGuide(微信公众号) 毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我 ...

  9. Spring中异步注解@Async的使用、原理及使用时可能导致的问题

    前言 最近,很多同学碰到了下面这个问题,添加了Spring提供的一个异步注解@Async循环依赖无法被解决了,下面是一些读者的留言跟群里同学碰到的问题: 本着讲一个知识点就要讲明白.讲透彻的原则,我决 ...

  10. Spring中常用注解的介绍

    spring中使用注解时配置文件的写法: <?xml version="1.0" encoding="UTF-8"?> <span style ...

最新文章

  1. 检查linux是否安装zlib,Linux下安装zlib
  2. 网络工程师_记录的一些真题_2018上半年上午
  3. Java分布式内存开源实现:Hazelcast
  4. Xcode 7错误:“缺少iOS分发签名身份...”
  5. “万能钥匙”可以打开大脑:脑刺激个性化医疗的新领域
  6. cloudera manage 4.8.6做hive元数据库主从同步后
  7. SQLite实例分析
  8. laravel的composer require报错:Installation failed, reverting ./composer.json to its original content.
  9. 【ros】2.ros的xx.msg编译
  10. android外置传感器,Android中外接键盘的检测的实现
  11. 485 九针头_三代德玛莎针头 九针头 十三针头 9针头 13针头 原装进口
  12. import导入模块
  13. 表格存储TableStore全新升级,打造统一的在线数据存储平台!
  14. java读c二进制文件_如何使用JAVA读取C / Matlab创建的二进制文件
  15. 硅谷新一代媒体巨头Mode Media突然宣布关闭
  16. 【译】JavaScript面试问题:事件委托和this
  17. 构建之法:第八次心得
  18. [CTSC2016]时空旅行 (线段树分治)
  19. 编程竞赛_编程竞赛和挑战清单
  20. matlab的实验报告,Matlab实验报告.doc

热门文章

  1. [Builder]代码中android版本的判断[from oschina.亭子happy]
  2. missing separator 解决方法
  3. matlab pie 空隙,编码解决饼图(Pie)的标签重叠问题
  4. js 中如何筛选处理符合条件的数据
  5. arduino nano关于microUSB无法用的处理
  6. better-scroll滚动的同时样式透明度发生变化
  7. 一个博客到底有多重要
  8. java timer异常_JAVA Timer的缺陷以及解决办法
  9. 2022-2028年中国林业碳汇行业市场发展规模及投资机会分析报告
  10. html顺势正旋转360度,庞明:混元太极揉球