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{
    
}










