zoukankan      html  css  js  c++  java
  • Spring完全注解开发

     

    注解的好处:如果管理很多的Bean,要求这些Bean都配置在applocationContext.xml文件中。用了注解之后,就不需要在xml文件中配置了,Spring提供了几个辅助类会自动扫描和装配这些Bean。所以大大减少了xml文件的体积,Spring会根据配置去扫描某些包里面的类,得到类的方法或注解,不同的注解会进行不同的操作。

    @Configuration

    这个注解一般的来说,用在类上面,加上这个注解的类可以成为一个spring的xml配置文件,使用的是java代码的配置

    //配置Spring装载类
    //Configurable 指定此类为Spring配置类。作为配置类,替代XML配置文件
    //ComponentScan 指定Bean范围(注解范围),扫描装载
    @Configurable
    @ComponentScan(basePackages = {"com.minelsh"})
    public class springConfig {
    }

    创建对象的注解

    Spring中作用在作用类上的注解有@Component注解和三个衍生注解:@Responsity  @Service和@Controller
    三个衍生注解的说明:

    @Controller:通常用于Controller类,也就是控制层(MVC)。

    @Service:通常用于Service类,也就是服务层。

    @Repository:通常用于DAO类,也就是持久层。

    当注解在作用类上时,表明这些类似交给Spring容器进行管理的。

    @Component注解的使用

    @Component("conversionImpl")
    //其实默认的spring中的Bean id 为 conversionImpl(首字母小写)
    public class ConversionImpl implements Conversion {
    ​
    }

    案例1:

    不指定bean的名称,默认为类名首写小写字母

    @Component
    public class University {
        to do sthing...
    }

    获取bean方式:

    ApplicationContext ctx  = new 
                    ApplicationContext context = new AnnotationConfigApplicationContext(Bean配置类);
    University ust = (University) ctx.getBean("university");

    案列2:

    指定bean的名称

    @Component("university1")
    public class University {
        to do sthing...
    }

    获取bean方式:

    ApplicationContext ctx  = new 
                    ApplicationContext context = new AnnotationConfigApplicationContext(Bean配置类);
    University ust = (University) ctx.getBean("university1");

     

    在构造器上的注解

    @Autowired  :根据类型(ByType)来自动匹配(核心注解)

    这个注解可以用于属性,setter方法,还有构造器上,这个注解用于注入依赖的对象。当再一个属性上加上@Autowired注解,有时可能要指定一些额外的值,Spring然后会自动的将值赋给这个属性。

    案例1:作用在构造器上

    public class MovieRecommender {
        private final CustomerPreferenceDao customerPreferenceDao;
        @Autowired
        public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
        this.customerPreferenceDao = customerPreferenceDao;
        }
     // ...
    }

    案列2:使用在setter方法上

    public class SimpleMovieLister {
        private MovieFinder movieFinder;
         @Autowired
        public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
        }
     // ...
    }

    案列3:使用在域属性上

    public class MovieRecommender {
        private final CustomerPreferenceDao customerPreferenceDao;
        @Autowired
        private MovieCatalog movieCatalog;
        @Autowired
        public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
        this.customerPreferenceDao = customerPreferenceDao;
        }
     // ...
    }

    案列4:使用在任意方法名和产生的普通方法上

    public class MovieRecommender {
        private MovieCatalog movieCatalog;
        private CustomerPreferenceDao customerPreferenceDao;
        @Autowired
        public void prepare(MovieCatalog movieCatalog,
        CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
        }
        // ...
    }

    案列5:使用在域属性数组上

    public class MovieRecommender {
        @Autowired
        private MovieCatalog[] movieCatalogs;
        // ...
    }

    案列6:使用在集合类型上

    public class MovieRecommender {
        private Set<MovieCatalog> movieCatalogs;
        @Autowired
        public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) {
        this.movieCatalogs = movieCatalogs;
        }
        // ...
    }

     

    @Qualifier

    这个注解和@Autowired一起使用,当想对注入的过程做更多的控制,@Qualifier可以帮助指定做更详细的配置。一般在两个或多个bean是相同的类型,spring在注入的时候会出现混乱

    例如有个接口叫做Hellointerface,然后两个bean都实现了Hellointerface接口

    @Component
    public class Bean1 implements HelloInterface {
      //
    }
    ​
    @Component
    public class Bean2 implements HelloInterface {
      //
    }

    如果只使用@Autowired注解,Spring就不知道到底要注入哪一个bean。解决办法就是加上@Qualifier注解

    @Component
    public class BeanA {
    ​
      @Autowired
      @Qualifier("bean2")
      private HelloInterface dependency;
      ...

     

    @Resource:根据类型和名称(ByType & ByName)来自动匹配(核心注解)

    @Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。

    @Resource有两个重要属性,分别是name和type
    spring将name属性解析为bean的名字,而type属性则被解析为bean的类型。所以如果使用name属性,这使用ByName的自动注入策略,如果使用Type类型则使用ByTyoe的自动注入策略。如果都没有指定,则听过反射机制使用ByName自动注入策略。

    案列1:使用@Resource注解

    @Resource(name="bucket")
        private String bucketName;
        @Resource(name="style")
        private String styleName;

    翻译为xml模式来看

    <bean name="bucket" class="java.lang.String">
        <constructor-arg value="${oos.bucketName}"/>
    </bean> 
    
    <bean name="style" class="java.lang.String">
        <constructor-arg value="${oos.styleName}"/>
    </bean>
  • 相关阅读:
    2. Add Two Numbers
    8. String to Integer (atoi)
    18. 4Sum
    15. 3Sum
    1. Two Sum
    227. Basic Calculator
    7. Reverse Integer
    PostMessage和SendMessage的区别
    Date Time Picker控件
    git 设置和取消代理
  • 原文地址:https://www.cnblogs.com/MineLSG/p/13276512.html
Copyright © 2011-2022 走看看