Spring注解--实现applicationContext.xml效果

 随着越来越多地使用Springboot敏捷开发,更多地使用注解配置Spring,而不是Spring的applicationContext.xml文件。

  • Configuration注解: Spring解析为配置类,相当于spring配置文件
  • Bean注解:容器注册Bean组件,默认id为方法名
1
2
3
4
5
6
7
@Configuration
public class AppConfig {
     @Bean
     public MyService myService() {
        return new MyServiceImpl();
     }
}       

等同于beans.xml文件

1
2
3
<beans>
    <bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>

1)applicationContext.xml文件-包扫描

复制代码
@ComponentScans(value = {@ComponentScan(value = "com.self",excludeFilters = {
                @Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
        })
})
@Configuration
public class RootConfig {
    
      //测试Bean
      @Bean
      public Person person() {
          return new Person("张励",22,"工程师");
      }
}
复制代码

2)导入properties文件

1
2
3
4
5
6
7
8
9
@PropertySource(value = {"classpath:person.properties"})
@Configuration
public class MainConfigOfProperty {
 
    @Bean
    public Person person() {
        return new Person();
    }
}

赋值

1
2
3
4
5
6
public class Person {
 
   @Value("${person.name}")//配置文件属性
    private String name;
 
}

3)数据源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@EnableTransactionManagement//开启基于注解的事务管理功能
@ComponentScan("com.self.ds")
@Configuration
public class TxConfig {
     
    //数据源
    @Bean
    public DataSource dataSource() throws Exception{
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setUser("root");
        dataSource.setPassword("000111");
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/self");
        return dataSource;
    }
     
      
    @Bean
    public JdbcTemplate jdbcTemplate() throws Exception{
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
        return jdbcTemplate;
    }
     
    //事务管理器
    @Bean
    public PlatformTransactionManager transactionManager() throws Exception{
        return new DataSourceTransactionManager(dataSource());
    }
     
 
}

  

单元测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class IOCTest {
     
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); 
     
    @Test
    public void test02() {
        Object bean1 = applicationContext.getBean("person");
        Object bean2 = applicationContext.getBean("person");
        System.out.println( bean1 == bean2);
    }
     
    @Test
    public void test01() {
        Object bean = applicationContext.getBean("person01");
        System.out.println("结果: " + bean);
    }
     
     
    @Test
    public void test() {
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for(String beanDef:beanDefinitionNames) {
            System.out.println("输出: " + beanDef);
        }
         
    }
 
}

执行结果

  

  

posted @   彩虹消失了  阅读(2624)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示