Spring编程---
Posted 夏小弥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring编程---相关的知识,希望对你有一定的参考价值。
1、核心容器(Core)
这是Spring框架最基础的部分,它提供了依赖注入(Dependency Injection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。
2、AOP模块
AOP即面向切面编程技术,Spring在它的AOP模块中提供了对面向切面编程的丰富支持。AOP允许通过分离应用的业务逻辑与系统级服务(例如安全和事务管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。
3、对象/关系映射集成模块ORM
Hibernate是成熟的ORM产品,Spring并没有自己实现ORM框架而是集成了几个流行的ORM产品如Hibernate、JDO和iBATIS等。可以利用Spring对这些模块提供事务支持等。
4、JDBC抽象和DAO模块
Spring虽然集成了几个ORM产品,但也可以不选择这几款产品,因为Spring提供了JDBC和DAO模块。该模块对现有的JDBC技术进行了优化。你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
5、Spring的Web模块
Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
6、应用上下文(Context)模块
核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。该模块还提供了一些面向服务支持这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。
另外,这个模块还提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括对模版框架例如Velocity和FreeMarker集成的支持。
7、Spring的MVC框架
Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts2,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。
入门示例:
Person.java
<span style="font-size:14px;">package cn.hncu.spring2;
public class Person
public Person()
System.out.println("Person的构造方法...");
</span>
配置文件applicationContext.xml
注:spring的两个特色中的一个就是使用了xml文件,之前在网上有人说4.0版本里面没有使用到了xml配置文件了,那是错误的,使用xml 配置文件是spring的一个特色
<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- Person p = new Person() -->
<!-- 默认是单例的,可以配置成原型模式
<bean id="p" class="cn.hncu.spring2.Person">
</bean>
-->
<!--scope属性值设为:prototype(每次获取都是一个新对象), request(同一个request中获取到的是同一个), session -->
<bean id="p" class="cn.hncu.spring2.Person" scope="prototype">
</bean>
</beans></span>
Demo.java
<span style="font-size:14px;">package cn.hncu.spring2;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class Demo
public static void main(String[] args)
Resource r=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(r);
Person p=(Person) factory.getBean("p");
System.out.println("p: "+p);
Person p2=(Person) factory.getBean("p");
System.out.println("p2: "+p2);
new MyThread(factory).start();
class MyThread extends Thread
private BeanFactory factory;
public MyThread(BeanFactory factory)
this.factory = factory;
@Override
public void run()
Person p3=(Person) factory.getBean("p");
System.out.println("p3: "+p3);
</span>
像上面配置文件中的scope="prototype"这样子设置的结果如下:
不设置的话如下:
如此看结果就能明白了吧。
spring实际上就是造一个容器,然后从容器中去取东西,不设置的话造同一个对象自然拿到的是相同的。
下面稍微模拟一下mvc模式service层和dao层的传值吧
但是要注意:Spring给bean注入值时的前提是,bean中的变量一定要写set、get方法
Person.java
package cn.hncu.spring3;
public class Person
private String name;
private Integer age;
public Person()
// System.out.println("Person的构造方法...");
public String getName()
return name;
public void setName(String name)
this.name = name;
public Integer getAge()
return age;
public void setAge(Integer age)
this.age = age;
@Override
public String toString()
return "Person [name=" + name + ", age=" + age + "]";
Demo.java
package cn.hncu.spring3;
import java.awt.event.ActionListener;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import cn.hncu.spring3.login.LoginAction;
public class Demo
//XmlBeanFactory这个bean工厂类在Spring3.0中已经过时,不建议使用
@Test
public void demo1()
Resource r=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(r);
Person p=(Person) factory.getBean("p");
System.out.println("p: "+p);
//Spring3.0带泛型,可以不用强转
Person p2=factory.getBean(Person.class);
System.out.println("p2: "+p2);
@Test//Spring3.0建议采用下面这种方式使用容器
public void demo2()
ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
Person p=(Person) factory.getBean("p");
System.out.println("p: "+p);
//Spring3.0带泛型,可以不用强转
Person p2=factory.getBean(Person.class);
System.out.println("p2: "+p2);
//演示依赖(xml)注入
@Test
public void demo3()
ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
LoginAction login=(LoginAction) factory.getBean("login");
login.execute();
LoginAction.java
package cn.hncu.spring3.login;
import cn.hncu.spring3.Person;
import cn.hncu.spring3.login.service.ILoginService;
public class LoginAction
private ILoginService service;
private Person p;
public ILoginService getService()
return service;
public void setService(ILoginService service)
this.service = service;
public Person getP()
return p;
public void setP(Person p)
this.p = p;
public void execute()
service.login(p);
service层
接口
package cn.hncu.spring3.login.service;
import cn.hncu.spring3.Person;
public interface ILoginService
public void login(Person p);
实现类
package cn.hncu.spring3.login.service;
import cn.hncu.spring3.Person;
import cn.hncu.spring3.login.dao.ILoginDAO;
public class LoginServiceImpl implements ILoginService
private ILoginDAO dao;
public ILoginDAO getDao()
return dao;
public void setDao(ILoginDAO dao)
this.dao = dao;
@Override
public void login(Person p)
dao.login(p);
dao层
接口
package cn.hncu.spring3.login.dao;
import cn.hncu.spring3.Person;
public interface ILoginDAO
public void login(Person p);
实现类
package cn.hncu.spring3.login.dao;
import cn.hncu.spring3.Person;
public class LoginDAOJdbc implements ILoginDAO
@Override
public void login(Person p)
System.out.println("dao,到数据库中读取用户信息以进行登录....");
System.out.println("dao中获取的用户输入信息:"+p);
配置文件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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 可以在配置文件中为对象注入属性值 -->
<bean id="p" class="cn.hncu.spring3.Person">
<property name="name" value="Jack"></property>
<property name="age" value="20"></property>
</bean>
<bean id="dao" class="cn.hncu.spring3.login.dao.LoginDAOJdbc"></bean>
<bean id="service" class="cn.hncu.spring3.login.service.LoginServiceImpl">
<property name="dao" ref="dao"></property>
</bean>
<bean id="login" class="cn.hncu.spring3.login.LoginAction">
<property name="service" ref="service"></property>
<property name="p" ref="p"></property>
</bean>
</beans>
再举一个例子演示给bean中不同的数据类型属性用配置文件设置值:
User.java
package cn.hncu.spring3.demo;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class User
private String name;
private Integer age;
private List<String> pets;
private Map<String, Object> map;
private Set<String> set;
private Object objs[];
public String getName()
return name;
public void setName(String name)
this.name = name;
public Integer getAge()
return age;
public void setAge(Integer age)
this.age = age;
public List<String> getPets()
return pets;
public void setPets(List<String> pets)
this.pets = pets;
public Map<String, Object> getMap()
return map;
public void setMap(Map<String, Object> map)
this.map = map;
public Set<String> getSet()
return set;
public void setSet(Set<String> set)
this.set = set;
public Object[] getObjs()
return objs;
public void setObjs(Object[] objs)
this.objs = objs;
@Override
public String toString()
return "User [name=" + name + ", age=" + age + ", pets=" + pets
+ ", map=" + map + ", set=" + set + ", objs="
+ Arrays.toString(objs) + "]";
Cat.java
package cn.hncu.spring3.demo;
public class Cat
private String name;
public String getName()
return name;
public void setName(String name)
this.name = name;
@Override
public String toString()
return "Cat [name=" + name + "]";
Demo2.java
package cn.hncu.spring3.demo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo2
//演示spring中<bean>属性注入的一些细节
@Test
public void demo()
ApplicationContext factory=new ClassPathXmlApplicationContext("app2.xml");
User user=factory.getBean("user", User.class);
System.out.println(user);
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<bean id="user" class="cn.hncu.spring3.demo.User">
<property name="name" value="Jack"></property>
<property name="age" value="21"></property>
<property name="pets">
<list>
<value>dog</value>
<value>cat</value>
<value>lion</value>
</list>
</property>
<property name="map">
<map>
<entry key="name" value="China"></entry>
<entry key="age" value="5000"></entry>
</map>
</property>
<property name="set">
<set>
<value>111</value>
<value>222</value>
<value>333</value>
</set>
</property>
<property name="objs">
<array>
<value>hello</value>
<ref bean="tom"/>
<list>
<value>dragon</value>
<value>phoenix</value>
</list>
<bean class="cn.hncu.spring3.demo.Cat">
<property name="name" value="Jack Cat"></property>
</bean>
</array>
</property>
</bean>
<bean id="tom" class="cn.hncu.spring3.demo.Cat">
<property name="name" value="Tom Cat"></property>
</bean>
</beans>
以上是关于Spring编程---的主要内容,如果未能解决你的问题,请参考以下文章