基于上一篇博文,用注解的方式替代xml文件
用配置类替代xml文件
注解介绍
-
@Configuration 可以指明当前类为配置类,可以用来替代xml文件
注意:当该类作为AnnotationConfigApplicationContext对象的参数传入时可以省去该注解
例:ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfiguration.class);
-
@ComponentScan 指定spring在创建容器时要扫描的包
属性:basePackages与value等价,用于指定要扫描的包的路径
其作用等价于在半注解半xml工程时,xml文件中需要的以下配置:
-
@Bean 将当前方法的返回值作为Bean对象存入spring容器中
属性:value与name等价,用于指定bean的id,不设置则默认为方法名 -
@Import 用于导入其他配置类
属性:用于指定其他配置类的字节码 xxx.class
注解使用示例
实现对xml文件中以下设置的替换
@Configuration
@ComponentScan(basePackages = "com.mj")
public class SpringConfiguration {
@Bean("runner")
@Scope("prototype")//runner避免线程干扰,需要设置为多例
public QueryRunner createQueryRunner(@Qualifier("dataSource1") DataSource dataSource){
//当有多个数据库连接时,可以在参数中用注解@Qualify指定数据库源的id
QueryRunner runner=new QueryRunner(dataSource);
return runner;
}
@Bean("dataSource1")
public ComboPooledDataSource createDataSource(){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.cj.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mytest?serverTimezone=GMT");
ds.setUser("root");
ds.setPassword("1234567890");
return ds;
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
持久层与服务层
@Repository("userDao")
public class UserDaoImpl implements IUserDao{
@Resource(name = "runner")
private QueryRunner runner;
@Service("accountService")
public class AccountService {
@Autowired
IUserDao userDao;
测试代码
@Test
public void testFindAll(){
//此处需要修改,将原有的调用xml文件的类换成调用注解配置类的类
ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfiguration.class);
//ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
AccountService as=ac.getBean("accountService", AccountService.class);
List<User> list=as.findAll();
System.out.println(list);
}