用过spring2.5的朋友应该都知道它的一些简单的应用,如:
bean.xml中配置<bean id="userDAO" class="cn.ling.spring3.dao.impl.UserDAOImpl">
然后在要用到的类中用注解注入,如下
@ContextConfiguration("classpath:beans.xml")
public class UserDAOTest {
@Resource(name="userDAO")
private UserDAO userDAO;
public void testSave() {
this.userDAO.save(new User());
}
}
或者不用注解,如下:
public void testSave() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserDAO userDAO = (UserDAO)context.getBean("userDAO");
userDAO.save(new User());
}
在这里,spring3.0给我们提供了一个新功能,可以避免上面的强制转换
UserDAO userDAO = context.getBean("userDAO", UserDAO.class);
呵呵,可能这个没方便多少!
如果你不大了解XML或者是不想用xml来配置bean,想用java风格来配置bean的话,那么spring3.0下面的这个特性就很合胃口了。首先再引入两个包:asm-3.2.jar和cglib-2.2.jar,我在下面上传了。
接着,在bean.xml中加入一句:<context:component-scan base-package ="cn.ling.spring3.config"> </context:component-scan>
然后建一个类cn/ling/spring3/config/AppConfig .java里面的代码如下:
@Configuration
public class AppConfig {
@Bean
public UserDAO userDAO() {
return new UserDAOImpl();
}
}
这个在bean.xml中相当于<bean id = "userDAO" class="userDAO"/>
这样就可以了。
看到这,可能你会问,那类里面的属性怎么注入呢。
其实道理也很简单,在上面的AppConfig.java中,再搞一个@Bean,引用第一个bean就可以了。修改如下(只在AppConfig.java中修改就可以了)。
@Configuration
public class AppConfig {
@Bean
public UserDAO userDAO() {
return new UserDAOImpl();
}
@Bean
public UserService userService() {
UserServiceImpl service = new UserServiceImpl();
service.setUserDAO(userDAO()); //在这里就注入了userDAO属性。
return service;
}
}
那么数据库的参数怎么配置呢?这个就搞得有点偏复杂了。如下,也是只在AppConfig.java中修改。
首先定义几个属性,用注入的方式。
private @Value("#{jdbcProperties.url}")String jdbcUrl;
private @Value("#{jdbcProperties.username}")String username;
private @Value("#{jdbcProperties.password}")String password;
然后,再加一个@Bean
@Bean
public DataSource dataSource(){
return new DriverManagerDataSource(jdbcUrl,username,password);
}
最后在bean.xml中加入一句<util:properties id="jdbcProperties" location="classpath: cn/ling/dao/jdbc.properties"/>
如何取得SessionFactory呢?如下
@Bean
public SessionFactorysessionFactory(){
//wire up a session factory
AnnotationSessionFactoryBean asFactoryBean = new AnnotationSessionFactoryBean();
asFactoryBean.setDataSource(dataSource()); //这里的dataSource就是上面讲的那个方法。
//add itional config
return asFactoryBean.getObject();
}
这一讲就到这,下一讲是另一个重点:SpEL表达式。