美文网首页
6.spring的纯注解配置

6.spring的纯注解配置

作者: 893914135dfd | 来源:发表于2019-05-26 17:05 被阅读0次

    🚩 新的注解介绍

    📌 @Configuration

    • 介绍
      从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件
      \color{red}{相当于<beans>根标签}
      配置类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
    • 属性
      value:用于指定配置类的字节码
    • 示例代码
      @Configuration
      public class SpringConfiguration {
           //spring容器初始化时,会调用配置类的无参构造函数
           public SpringConfiguration(){
              System.out.println(“容器启动初始化。。。”);
           }
      }
    

    📌 @Bean

    • 介绍
      @Bean标注在方法上(返回某个实例的方法),等价于spring配置文件中的<bean>
      作用为:注册bean对象
      主要用来配置非自定义的bean,比如DruidDataSource、SqlSessionFactory
    • 属性
      name:给当前@Bean 注解方法创建的对象指定一个名称(即 bean 的 id)。
      如果不指定,默认与标注的方法名相同
      @Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;
    • 示例代码
      @Configuration
      public class SpringConfiguration {
          //spring容器初始化时,会调用配置类的无参构造函数
          public SpringConfiguration(){
              System.out.println(“容器启动初始化。。。”);
          }
          @Bean
          @Scope(“prototype”)
          public StudentService studentService(){
              return new StudentServiceImpl(1,“张三”);
          }
       }
    

    📌 @ComponentScan

    • 介绍
      相当于context:component-scan标签
      组件扫描器,扫描@Component、@Controller、@Service、@Repository注>解的类。
      该注解是编写在类上面的,一般配合@Configuration注解一起使用。
    • 属性
      basePackages:用于指定要扫描的包。
      value:和basePackages作用一样。
    • 示例代码
      Bean类(Service类):
    @Service
    public class StudentServiceImpl implements StudentService {
    
      @Override
      public void saveStudent() {
          System.out.println("保存学生Service实现");
      }
    
    }
    

    配置类:

    @Configuration
    @ComponentScan(basePackages="com.o98k.spring.service")
    public class SpringConfiguration {
    
      public SpringConfiguration() {
          System.out.println("容器初始化...");
      }
      
    }
    

    📌 @PropertySource

    • 介绍
      加载properties配置文件
      编写在类上面
      相当于context:property-placeholder标签
    • 属性
      value[]:用于指定properties文件路径,如果在类路径下,需要写上classpath
    • 示例代码
      配置类:
    @Configuration
    @PropertySource(“classpath:jdbc.properties”)
    public class JdbcConfig {
    
     @Value("${jdbc.driver}")
     private String driver;
    
     @Value("${jdbc.url}")
     private String url;
    
     @Value("${jdbc.username}")
     private String username;
    
     @Value("${jdbc.password}")
     private String password;
    
     /**
     *    创建一个数据源,并存入 spring 容器中
     *    @return
     */
     @Bean(name="dataSource")
     public DataSource createDataSource() {
       try {
         ComboPooledDataSource ds = new ComboPooledDataSource();  
         ds.setDriverClass(driver);
         ds.setJdbcUrl(url);
         ds.setUser(username);
         ds.setPassword(password); 
         return ds;
       } catch (Exception e) {
         throw new RuntimeException(e);
      }
    
     }
    
    }
    

    properties文件:

    jdbc.driver=com.mysql.jdbc.Driver 
    jdbc.url=jdbc:mysql:      ///spring
    jdbc.username=root 
    jdbc.password=root
    

    问题:
    当系统中有多个配置类时怎么办呢?想一想之前使用XML配置的时候是如何解决该问题的。


    🚩 通过注解获取容器

    📌 Java应用(AnnotationConfigApplicationContext)

    ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
    StudentService service = context.getBean(StudentService.class);
    service.saveStudent();
    

    📌 Web应用(AnnotationConfigWebApplicationContext)

    <web-app>
       <context-param>
           <param-name>contextClass</param-name>
           <param-value>
               org.springframework.web.context.
               support.AnnotationConfigWebApplicationContext
           </param-value>
       </context-param>
       <context-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>
               com.kkb.spring.test.SpringConfiguration
           </param-value>
       </context-param>
       <listener>
           <listener-class>
               org.springframework.web.context.ContextLoaderListener
           </listener-class>
       </listener>
    </web-app>
    

    ⚡ 本文章非原创
    ⚡ 仅供参考学习
    ⚡ 内容来源于某视频网教学课件

    相关文章

      网友评论

          本文标题:6.spring的纯注解配置

          本文链接:https://www.haomeiwen.com/subject/tjqmzqtx.html