Spring-2 Spring注解开发

Spring是轻代码重配置的框架,配置比较繁重,影响开发效率。所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。

 

1. 原始注解

 

在类中,直接使用注解替换核心配置文件中Bean以及相关的属性注入配置。常用注解如下:

//<bean id="userService" class="com.stepheng.service.impl.UserServiceImpl">
@Service("userService")
//@Scope("prototype") //Bean的作用范围
//@Scope("singleton") //Bean的作用范围
public class UserServiceImpl implements UserService {
    //<property name="userDao" ref="userDao"></property>
    //@Autowired //按照数据类型从Spring容器中进行匹配 如果Spring中只有一个UserDao 可以省略@Qualifier
    //@Qualifier("userDao") //按照Bean的id进行匹配,但是此处的@Qualifier需要结合@Autowired一起用
    @Resource(name="userDao") //类似于 @Autowired 和 @Qualifier("userDao")的结合
    public UserDao userDao;

    //public void setUserDao(UserDao userDao) {
    //    this.userDao = userDao;
    //}

    @Value("stepheng")
    private String name;

    @Value("${jdbc.driver}") //注入普通属性
    private String driver;

    public void save() {
        userDao.save();
        System.out.println("name="+name);
        System.out.println("driver="+driver);
    }
}

@Service("userService") 将该类注入Spring容器,id="userService" ,等价于配置文件中的 <bean id="userService" class="com.stepheng.service.impl.UserServiceImpl">,@Repository("userDao") 、@Controller("userController")类似,只是表示的含义不一样。

@Scope("prototype") //Bean的作用范围 

@Autowired //按照数据类型从Spring容器中进行匹配 如果Spring中只有一个UserDao,可以只使用该注解 ,类似于Bean中的 <property name="userDao" ref="userDao"></property>

@Qualifier("userDao") //按照Bean的id进行匹配,但是此处的@Qualifier需要结合@Autowired一起用

@Resource(name="userDao") //类似于 @Autowired 和 @Qualifier("userDao")的结合

@Value("${jdbc.driver}") //注入普通属性,值是配置文件中的值

 

2. 新注解

 

新注解的主要功能是替换整个Spring核心配置文件,由核心配置类替代。接下来介绍如何替代。主要注解如下:

  • 新建核心配置类,在类上添加注解
@Configuration //标志该类是Spring的核心配置类 替代核心配置文件 applicationContext.xml
//<context:component-scan base-package="com.stepheng"></context:component-scan>
@ComponentScan("com.stepheng")
//<import resource=""/>
@Import(DataSourceConfig.class)
public class SpringConfiguration {

}

@Configuration 标志该类是Spring的核心配置类,替代核心配置文件 applicationContext.xml

@ComponentScan("com.stepheng") 表示组件扫描,代替 <context:component-scan base-package="com.stepheng"></context:component-scan>

@Import(DataSourceConfig.class) 表示核心配置类在加载时导入其他配置类DataSourceConfig ,类似之前的<import resource=""/>

  • 配置文件properties的替换
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.user}")
    private String user;
    @Value("${jdbc.password}")
    private String password;

    @Bean("dataSource") //Spring会将当前方法返回值以指定名称存到容器中
    public DataSource getDataSource() throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(user);
        dataSource.setPassword(password);
        return dataSource;
    }

}

@PropertySource("classpath:jdbc.properties") 表示读取配置文件jdbc.properties,等价于之前的<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>,加上该注解的类,可以使用 @Value("${jdbc.driver}")获取配置文件中的值。

@Bean("dataSource") //Spring会将当前方法返回值以指定名称存到容器中,主要为了将第三方类的实现注入到Sprin容器中。

 

 

上一篇:
下一篇: