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); } } } |
执行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步