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容器中。