Spring依赖注入
假如你没有一个非常给力的团队,我只能说与其让别人来找你,不如我去找别人或者组建
自己的团队,Just Go!!! ---------程序员的自我激励
这几天项目忙的差不多了,静静的坐下开始静静的磨刀,接受下一轮更大的挑战,虽然Struts2和hibernate在目前的开发阶段已经够用了,但是为了更好的利用技术,实现更高效快速的开发,我就坐下静静的开始学Sping----一个神秘好玩的东西。
Spring是Rod Johnson这个伟大的人发明的一个框架是开源社区鼎鼎有名的大神级人物。
Spring是一个轻量级框架, Java EE的春天,当前主流框架。
目标: 使现有技术更加易用,推进编码最佳实践
内容: 依赖注入容器,AOP实现(声明式事务), DAO/ORM支持,Web集成
Spring框架的核心技术就是依赖注入和控制反转,从横面和纵面来进行解耦。
今天我开始写自己的第一个Spring Demo,这里使用到了依赖注入,不过在丧心病狂贴代码之前我们要搞清楚为什么要使用是依赖注入?
我们知道面向对象的方法是的我们的系统实现变得容易,但是当我们的系统变得复杂面向对象的方法使我们变得很无力,因为我们要使用大量的对象,系统变得臃肿不好维护。
我们就要采用组建化的方法进行系统的开发。
而依赖注入的目的就是强制将组建的构建和使用分开。
现在不多说了,上代码:
首先是User类:
package com.zdx.model;
public class User {
private String userName;
private String passWord;
public User() {
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
然后是UserDAO类:
package com.zdx.dao;
import com.zdx.model.User;
public interface UserDAO {
public void save(User user);
}
其次是UserDAOImpl类:
package com.zdx.dao;
import com.zdx.model.User;
public class UserDAOImpl implements UserDAO {
@Override
public void save(User user) {
System.out.println("11111111111111111111111111");
}
}
然后是UserService类:
package com.zdx.service;
import com.zdx.dao.UserDAO;
import com.zdx.dao.UserDAOImpl;
import com.zdx.model.User;
public class UserService {
private UserDAO userDAO;
public void addUser(User user) {
this.userDAO.save(user);
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
然后比较关键的就是beans.xml,Spring容器通过此配置文件创建并管理对象
这里要注明的是DI有两种方式,一种是设值注入,一种是构造注入。
设置注入可以用内部注入和外部注入。
<?xml version="1.0" encoding="UTF-8"?> <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-2.5.xsd"> <bean name="user" class="com.zdx.model.User"></bean> <bean name="userDao" class="com.zdx.dao.UserDAOImpl"></bean> <bean name="userService" class="com.zdx.service.UserService"> <!-- name要和类属性的命名一致 --> <property name="userDAO" ref="userDao"></property> <!-- 下面这种使用匿名对象的方式同样可以达到相同的效果 <property name="userDAO"> <bean class="com.zdx.dao.UserDAOImpl"> </bean> </property> --> </bean> </beans>
然后就是Test类了
package com.zdx.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zdx.model.User;
import com.zdx.service.UserService;
public class TestSpring {
@Test
public void testSpring() throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
UserService service=(UserService) ctx.getBean("userService");
User user=(User) ctx.getBean("user");
service.addUser(user);
}
}
运行后就会出现输出:
11111111111111111111111111