1. 导入依赖
junit和spring-test
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.16.RELEASE</version>
</dependency>
2. 注解的作用
- 可以通过在.java文件中添加注解,可以替代spring-config.xml配置文件中的数据源、组件扫描等文件
注解 | 说明 |
---|---|
@Configuration | 用于指定当前类是一个Spring配置类,当创建容器时会从该类上加载注解 |
@ComponentScan | 用于指定Spring在初始化容器时哟啊扫描的包,作用和Spring的xml配置文件中的<context:component-scan base-package=“com.lyx”/>一样 |
@Bean | 使用在方法上,标注将该方法的返回值存储到Spring容器中 ,如@Bean(“dataSource”),Spring会将当前方法的返回值以指定名称(dataSource)存储到Spring容器中 |
@PropertySource | 用来加载.properties文件中的配置,作用和Spring的xml配置文件中的 <context:property-placeholder location=“classpath:jdbc.properties”/>一样 |
@Import | 用于导入其他配置文件,作用和Spring的xml配置文件中的<import resource=“classpath:spring.xml”/>一样,@Import({XXX.class,XXX.xml})可以导入多个配置文件 |
3. 注解替换
@Configuration、@ComponentScan、@Bean、@PropertySource、@Import
3.1 注解替换Dao层
原xml文件如下,我们是不用写例如UserDaoImpl等UserDao的实现类的,使用注解开发却需要写,因为注解是添加在实现类上面
<?xml version="1.0" encoding="utf8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
>
<bean id="user" class="com.lyx.entity.User">
<property name="id" value="1"></property>
<property name="city" value="China"></property>
</bean>
</beans>
注解添加在实现类上面
import com.lyx.dao.UserDao;
import org.springframework.stereotype.Repository;
//替换xml文件的<bean id="userDao" class="com.lyx.entity.UserDao"></bean>
@Repository("userDao")//由于是Dao层,把@Component替换成@Repository
public class UserDaoImpl implements UserDao{
public User queryUserById(int id){
//数据库查询
}
}
3.2 注解替换Service层
//替换xml文件的<bean id="userService" class="com.lyx.entity.UserService"></bean>
@Service("userService")//由于是Service,把@Component替换成@Service
public class UserServiceImpl implements UserService{
@Resource(name="userDao")//跟Dao注解对应,替换原先注解@Autowired、@Qualifier("userDao")
private UserDao userDao;
public User queryUserById(int id){
userDao.queryUserById(id);
}
//get和set方法也可以不写,
}
3.3 注解替换数据源
<?xml version="1.0" encoding="utf8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd "
>
<!-- placeholder占位符-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="${jdbc.init}"/>
<property name="maxWait" value="60000"/>
<property name="timeBetweenEvictionRunsMillis" value="50000"/>
<property name="minEvictableIdleTimeMillis" value="3000"/>
</bean>
<context:component-scan base-package="com.lyx"/>
</beans>
DataSourceConfiguration.java
//标志该类是Spring的核心配置类
@Configuration
//替换xml文件的<context:property-placeholder location="classpath:jdbc.properties"/>
@PropertySource("classpath:jdbc.properties")
//替换xml文件的组件扫描<context:component-scan base-package="com.lyx"/>
@ComponentScan("com.lyx")
public class DataSourceConfiguration{
@Bean("dataSource")//Spring会将当前方法的返回值以指定名称存储到Spring容器中
public DataSource getDataSource() throws PropertyVetoException{
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("${jdbc.driverClass}");
dataSource.setUrl("${jdbc.url");
dataSource.setUsername("${jdbc.username}");
dataSource.setPassword("${jdbc.password}");
return dataSource;
}
}
- 把上面的DataSourceConfiguration.java配置类,import导入SpringConfiguration.java类文件
@Configuration
@Import({DataSourceConfiguration.class})
public class SpringConfiguration{
}