依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中
控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负
责得。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。
Spring 的主要特性。
(1)降低组件之间的耦合度,实现软件各层之间的解耦。
(2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS 服务、持久化服
务等等。
(3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。
(4)容器提供了AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能。
(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、
HibernateTemplate.
(6)对主流的应用框架提供了集成支持。
首先,在官方网站下载spring2.5.zip包,
解压文件,找到lib目录,
commons-attributes-api.jar
commons-attributes-compiler.jar
commons-logging.jar
log4j-1.2.15.jar
spring-beans.jar
spring-context.jar
spring-core.jar
以上只是加入了spring的核心包, 如果需要有aop支持的,则需另外加入.
在eclipse中新建工程,
然后把如上的几个jar包拷贝到lib目录中.
建立包:
pack.java.iuserdao.
IuserDao 接口.
package pack.java.iuserdao;
public interface IuserDao {
public String userdao(String name);
}
建立包pack.java.userdaoimpl.
package pack.java.userdaoimpl;
import java.io.Serializable;
import pack.java.iuserdao.IuserDao;
public class UserDaoImpl implements IuserDao, Serializable {
private static final long serialVersionUID = 4746185155498963758L;
public String userdao(String name) {
// TODO Auto-generated method stub
return "My Name Is "+name;
}
}
建立一个简单的单例模式.
package pack.java.spring;
import pack.java.userdaoimpl.UserDaoImpl;
/**
* 单例模式;
* @author Administrator
*
*/
public class UserDapSingleFactory {
private static UserDaoImpl userDaoImpl;
private UserDapSingleFactory(){}
public static UserDaoImpl getUserDaoSingleFactory(){
if(userDaoImpl==null){
return new UserDaoImpl();
}
return userDaoImpl;
}
}
Spring的applicationContext.xml配置如下内容: <?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"> <!-- UserDao的注入 --> <bean id="userdaoimpl" class="pack.java.userdaoimpl.UserDaoImpl"/> <!-- SingleFactory的注入 --> <bean id="sigleFactory" class="pack.java.spring.UserDapSingleFactory" factory-method="getUserDaoSingleFactory"/> <!-- SprigDao的注入 --> <bean id="springDemo" class="pack.java.userdaoimpl.SpringDemo"> <property name="userdaoimpl" ref="userdaoimpl"></property> <property name="addressList"> <list> <value type="java.lang.String">广东省深圳市</value> <value type="java.lang.String">湖南省株洲市</value> <value type="java.lang.String">陕西省西安市</value> </list> </property> <property name="likeSet"> <set> <value>打篮球</value> <value>乒乓球</value> <value>踢足球</value> </set> </property> <property name="nameMap"> <map> <entry key="key1" value="张三"></entry> <entry key="key2" value="李四"></entry> <entry key="key3" value="王五"></entry> </map> </property> </bean> </beans>
最后,写入一个测试类;
package pack.java.userdaoimpl;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import pack.java.iuserdao.IuserDao;
import pack.java.spring.UserDapSingleFactory;
public class SpringDemo {
//通过依赖注入,得到实例对象;
private IuserDao userdaoimpl;
private UserDapSingleFactory sigleFactoryImpl;
private List<String> addressList;
private Map<String,String> nameMap;
private Set<String> likeSet;
public void setNameMap(Map<String, String> nameMap) {
this.nameMap = nameMap;
}
public void setLikeSet(Set<String> likeSet) {
this.likeSet = likeSet;
}
public void setAddressList(List<String> addressList) {
this.addressList = addressList;
}
public void setSigleFactoryImpl(UserDapSingleFactory sigleFactoryImpl) {
this.sigleFactoryImpl = sigleFactoryImpl;
}
public void setUserdaoimpl(IuserDao userdaoimpl) {
this.userdaoimpl = userdaoimpl;
}
@SuppressWarnings("static-access")
private void displayInfo(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
SpringDemo springDemo=(SpringDemo) applicationContext.getBean("springDemo");
String str=springDemo.userdaoimpl.userdao("Admin");
System.out.println(str);
UserDaoImpl iuserDao=springDemo.sigleFactoryImpl.getUserDaoSingleFactory();
System.out.println(iuserDao.userdao("周海涛"));
System.out.println("\nlist集合输出如下:");
for(String strList:springDemo.addressList){
System.out.println(strList);
}
System.out.println("\nset集合输出如下:");
for(String like:springDemo.likeSet){
System.out.println(like);
}
System.out.println("\nmap集合输出如下:");
for(Iterator<String> iterator=springDemo.nameMap.keySet().iterator();iterator.hasNext();){
String key=iterator.next();
System.out.println(key+","+springDemo.nameMap.get(key));
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new SpringDemo().displayInfo();
}
}
测试结果,
---------------------------------------------------------------------------
My Name Is Admin
My Name Is 周海涛
list集合输出如下:
广东省深圳市
湖南省株洲市
陕西省西安市
set集合输出如下:
打篮球
乒乓球
踢足球
map集合输出如下:
key1,张三
key2,李四
key3,王五