参考资料:https://lfvepclr.gitbooks.io/spring-framework-5-doc-cn/content/
1. 注解配置 Bean 写一个 SpringConfig.java 作为注解配置类,它的作用和 bean.xml 是一样的。以 jdbc 为例。
Spring中的新注解:
@Configuration 作用:指定当前类是一个配置类
注意:当配置类作为 AnnotationConfigApplicationContext 对象创建的参数时,该注解可以不写。
@ComponentScan (“com.demo”) 作用:用于通过注解指定 spring 在创建容器时要扫描的包
value:它和 basePackages 的作用是一样的,都是用于指定创建容器时要扫描的包。 使用此注解就等同于在 xml 中配置了:
<context:component-scan base-package=”com.demo”></context:component-scan>
@PropertySource (“classpath:jdbc.properties”) 作用:用于指定 properties 文件的位置
value:指定文件的名称和路径。
classpath:表示类路径下 使用此注解就等同于在xml中配置了:
<!– applicationContext.xml 中导入 properties 文件 –>
<context:property-placeholder location=”classpath:jdbc.properties”/>
测试:
在 resources 目录下创建 jdbc.properties
1 2 3 4 jdbc.driverClassName =com.mysql.jdbc.Driver jdbc.url =jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai jdbc.username =root jdbc.password =root
注意:使用 ${properties文件中key的名称} 来获取对应的值。
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 32 33 34 35 36 <dependency > <groupId > org.springframework</groupId > <artifactId > spring-context</artifactId > <version > 5.2.7.RELEASE</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-jdbc</artifactId > <version > 5.2.7.RELEASE</version > </dependency > <dependency > <groupId > com.alibaba</groupId > <artifactId > druid</artifactId > <version > 1.1.22</version > </dependency > <dependency > <groupId > junit</groupId > <artifactId > junit</artifactId > <version > 4.13</version > <scope > test</scope > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 8.0.20</version > </dependency > <dependency > <groupId > org.projectlombok</groupId > <artifactId > lombok</artifactId > <version > 1.18.12</version > </dependency > <dependency > <groupId > org.springframework</groupId > <artifactId > spring-test</artifactId > <version > 5.2.7.RELEASE</version > </dependency >
在 SpringConfig 类中添加方法
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 32 33 @Configuration @ComponentScan("com.demo") @PropertySource("classpath:jdbc.properties") public class SpringConfig { @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Value("${jdbc.url}") private String url; @Value("${jdbc.driverClassName}") private String driverClassName; @Bean public JdbcTemplate getJdbcTemplate () throws Exception { Properties properties = new Properties (); properties.setProperty("username" , username); properties.setProperty("password" , password); properties.setProperty("url" , url); properties.setProperty("driverClassName" , driverClassName); DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); return new JdbcTemplate (dataSource); } }
dao 层
1 2 3 4 5 6 7 8 9 10 11 12 @Repository public class UserDaoImpl implements UserDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<User> findAll () { List<User> users = jdbcTemplate.query("select * from t_user" , new BeanPropertyRowMapper <>(User.class)); return users; } }
编写测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class TestController { @Autowired private UserController userController; @Test public void testFindAll () { List<User> list = userController.findAll(); System.out.println(list); } }
2. @Import
@Import 作用:用于导入其他的配置类
value:用于指定其他配置类的字节码。 当使用 Import 的注解之后,有 Import 注解的类就父配置类,而导入的都是子配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @Configuration public class ConfigA { @Bean public A a () { return new A (); } } @Configuration @Import(ConfigA.class) public class ConfigB { @Bean public B b () { return new B (); } }
1 2 3 4 5 6 7 public static void main (String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext (ConfigB.class); A a = ctx.getBean(A.class); B b = ctx.getBean(B.class); }