Spring中用配置类代替配置xml文件
Posted 红颜莫知己
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中用配置类代替配置xml文件相关的知识,希望对你有一定的参考价值。
目录
1.Configuration注解
这个注解的意义就是:
只要包含这个configuration注解的类就是配置类
2.ComponentScan注解
@ComponetScan代替xml配置中的
<context:component-scan base-package="edu.xalead"/>
@ComponetScan默认扫描该注解所在的包及子包,如果要扫的类,并不在该注解所在的包及子包下,和指定basePackages属性的值用于指定要扫描的包,这个属性的值是一个字符串数组,可以配置多个独立的包
@Configuration
@ComponentScan
public class MyConfig {
}
basePackages可以包含多个包名
@Configuration
@ComponentScan(basePackages = {"包名","包名","包名"})
3.注解配置工厂的获取
- xml配置工厂的获取是这样的:
BeanFactory beanFactory = new ClassPathXmlApplicationContext("beanFactory.xml");
- 注解配置工厂的获取:
BeanFactory beanFactory = new AnnotationConfigApplicationContext(MyConfig.class);
4.Bean注解
- Bean注解额作用就是将方法里返回的对象放入spring工厂
我们在xml文件中配置阿里数据源(Druid)是这样配置的:
具体操作请访问博客Spring连接阿里数据源(Druid)
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/cms"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
我们现在用配置类来配置
@Configuration
@ComponentScan
public class MyConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/cms");
ds.setUsername("root");
ds.setPassword("");
return ds;
}
}
Bean()注释默认名字为方法名,我们也可以取别名
测试:
public void test5(){
BeanFactory beanFactory = new AnnotationConfigApplicationContext(MyConfig.class);
//两种从工厂中获取方法,通过名字和类名
//DataSource dataSource = (DataSource)beanFactory.getBean("dataSource");
DataSource dataSource = beanFactory.getBean(DataSource.class);
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
5.Import注解
- 我们一开始说道,只要有@Configuration注解的都是配置类,如果其它的配置类也想省略@Configuration注解,则必须在工厂默认使用的配置类中使用@Import注解把配置类引用进来
就比如我们写一个DataSourceConfig类,然后将其变为配置类,加上@Configuration注解
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/cms");
ds.setUsername("root");
ds.setPassword("");
return ds;
}
}
如果你想省去@Configuration注解的话就可以这样写:
@Configuration
@ComponentScan
@Import(DataSourceConfig.class)
public class MyConfig {
}
但其实在真正开发中我们两个注解都写,以防出错
6.Spring属性配置文件及PropertySource注解
我们在开发中连接数据库是不会像上面那样连接的,那样连接局限性太大了,如果你要改换数据库将会非常麻烦,所以我们在属性配置文件里面写数据库的连接数据
jdbc.peoperties
jdbc.driverclass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/cms
jdbc.username=root
jdbc.password=
beanFactory.xml
<context:property-placeholder location="jdbc.properties"/>
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property name="driverClassName" value="${jdbc.driverclass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
DataSourceConfig实体类
@Configuration
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
@Value("${jdbc.driverclass}")
private String driverClass;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driverClass);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
测试:
public void test5(){
BeanFactory beanFactory = new AnnotationConfigApplicationContext(MyConfig.class);
// DataSource dataSource = beanFactory.getBean(DataSource.class);
DataSource dataSource = (DataSource)beanFactory.getBean("dataSource");
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
7.Spring和junit的集成
添加spring test库的坐标
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.9.RELEASE</version>
<scope>test</scope>
</dependency>
- 导入spring整合junit的jar(坐标)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
-
使用Junit提供的一个注解把原有的main方法替换了,替换成spring提供的 @Runwith
-
告知spring的运行器,spring和ioc创建是基于xml还是注解的,并且说明位置
@ContextConfiguration
locations:指定xml文件的位置,加上classpath关键字,表示在类路径下
classes:指定注解类所在地位置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyConfig.class)
public class TestSpringintergration {};
特别注意:当我们使用spring 5.x版本的时候,要求junit的jar必须是4.12及以上
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyConfig.class)
public class TestSpringintergration {
@Autowired
private User user;
@Test
public void test1(){
System.out.println(user);
}
}
若有误,请指教!
以上是关于Spring中用配置类代替配置xml文件的主要内容,如果未能解决你的问题,请参考以下文章
Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea(