查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!
1.浅谈Spring
Spring是一个源开的制控转反(Inversion of Control ,IOC)和面向切面(AOP)的容器框架.它的主要目得是简化业企开辟.
帮助文档路径,在springjar包的存在路径下:
spring-framework-3.2.2.RELEASE-dist\spring-framework-3.2.2.RELEASE\docs\spring-framework-reference\html 网页帮助文档
spring-framework-3.2.2.RELEASE-dist\spring-framework-3.2.2.RELEASE\docs\spring-framework-reference\pdf pdf文档
l IOC 制控转反
public class PersonServiceBean {
private PersonDao personDao = new PersonDaoBean();
public void save(Person person){
personDao.save(person);
}
}
PersonDaoBean 是在用应部内建创及维护的。所谓制控转反就是用应本身不责负依附对象的建创及维护,依附对象的建创及维护是由外部容器责负的。这样制控权就由用应转移到了外部容器,制控权的转移就是所谓转反。
l 依附注入(Dependency Injection)
当我们把依附对象交给外部容器责负建创,那么PersonServiceBean 类可以改成如下:
public class PersonServiceBean {
private PersonDao personDao ;
//通过构造器参数,让容器把建创好的依附对象注入进PersonServiceBean,当然也可以用应setter法方行进注入。
public PersonServiceBean(PersonDao personDao){
this.personDao=personDao;
}
public void save(Person person){
personDao.save(person);
}
}
所谓依附注入就是指:在运行期,由外部容器动态地将依附对象注入到组件中。
2.spring的长处
1)低降组件之间的耦合度,现实软件各层之间的耦解。
2)可以用应容器供给的多众服务,如:事务管理服务、消息服务等等。当我们用应容器管理事务时,开辟人员就不再要需手工制控事务.也不需理处杂复的事务传播。
3)容器供给单例模式持支,开辟人员不再要需自己编写现实代码。
容器供给了AOP术技,利用它很易容现实如权限截拦、运行期监控等功能。
4)容器供给的多众辅作类,用应这些类够能放慢用应的开辟,如: JdbcTemplate、 HibernateTemplate。
Spring对于主流的用应框架供给了集成持支,如:集成Hibernate、JPA、Struts等,这样更便于用应的开辟。
3.Spring的其他注意事项
l spring的配置件文模版
<?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">
.....
</beans>
该配置模版可以从spring的参考手册(spring帮助寄存路径下/spring-framework-3.2.2.RELEASE-dist/spring-framework-3.2.2.RELEASE/docs/spring-framework-reference/html/beans.html第五章的beans-factory-metadata下)或spring的例子中到得。配置件文的取名可以恣意,件文可以寄存在任何目录下,但考虑到通用性,一般放在类路径下。
l 编写spring配置件文时,不能现出帮助信息
由于spring的schema件文位于络网上,如果呆板不能连接到络网,那么在编写配置信息时候就没法现出提示信息,解决法方有两种:
1)让呆板上彀,eclipse会主动从络网上下载schema件文并缓存在硬盘上。
2)手动添加schema件文,法方如下:
windwos->preferences->myeclipse->files and editors->xml->xmlcatalog;点"add",在现出的口窗中的Key Type选中择URI,在location选中"File system",然后在spring解压目录的dist/resources目录选中择spring-beans-2.5.xsd,回到设置口窗的时候不要急着关闭口窗,应把口窗中的Key Type为改Schema location,Key为改http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
4.配装Bean(第一讲)
一、纳容你的bean
bean工厂:最简略的容器,供给了基本的依附注入持支。建创各种类型的Bean.
用应上下文:建立在bean工厂基本之上,供给统系架构服务。
一.1 bean工厂分析
工厂设计模式,建创分发各种bean。配置好它们之间的写作关系,与参bean的生命周期。bean工厂只把bean的定义信息载进来,用到的时候才实例化。
一.2用应用应上下文
ApplicationCotext,spring更加高等的容器。功能强大:
1).供给本文信息剖析工具,包含对国际化持支。
2).供给载入件文资源的通用法方,如图片。
3).可以向注册为监听器的bean发送件事。
在很少的情况下,用应BeanFactory,如在移动设备。
三种经常用到的现实:
1).ClassPathXmlApplicationContext:从类路径中加载。
2).FileSystemXmlApplicationContext:从件文统系加载。
3).XmlWebApplicationContext:从web统系中加载。
ApplicationContext context = new FileSystemXmlApplicationContext("c:\foo.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");
除了用应上下文供给的附加功能外,用应上下文与bean工厂的另一个主要区别是关于单例bean如何被加载。bean工厂延迟加载全部bean,直到getBean()法方被用调。用应上下文会在启动后预载入全部单例bean.这样可保确用应不要需等待他们被建创。
4.例案:第一个spring java项目
改例案只列举出主要配置件文和测试类,其他类没什么养营就不再赘述了;面下列出的几个配置件文和症结类中都要要需注意的事项和响应的释解注释。
- <SPAN style="FONT-FAMILY: KaiTi_GB2312; FONT-SIZE: 18px">spring.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.xsd">
- <import resource="spring-dao.xml"/>
- <import resource="spring-service.xml"/>
- </beans>
- spring-dao.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.xsd">
- <!-- spring容器就是责负建创、管理、维护Bean 并且够能依附注入到响应组件上 -->
- <bean id="helloDaoImpl"class="www.csdn.spring.dao.impl.HelloDaoImpl"
- scope="prototype"></bean>
- <!-- spring-service.xml引用的改配置件文,所以在前者中加入了lazy-init="false",这里可以不写也会起作用;
- lazy-init性属的意思是:否是延迟加载,就是一建创 spring容器就去实例化对应容器对象,即行执改对象的构造器,而不是在用应的时候才去加载
- lazy-init="false" ,认默的值为default,但是default=false
- -->
- </beans>
- spring-service.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.xsd">
- <bean id="helloServiceImpl"class="www.csdn.spring.service.impl.HelloServiceImpl" scope="singleton" lazy-init="false">
- <property name="helloDao" ref="helloDaoImpl"/>
- </bean>
- </beans>
- DemoTest类
- package www.csdn.spring.test;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import www.csdn.spring.dao.HelloDao;
- import www.csdn.spring.dao.impl.HelloDaoImpl;
- import www.csdn.spring.service.HelloService;
- import www.csdn.spring.service.impl.HelloServiceImpl;
- publicclass DemoTest {
- @Test
- publicvoid testHello(){
- // 容器建创实例化容器;读取 classes 路径面下的件文 参数动态参数、单个参数、组数等
- ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
- //用应dao和daoImpl的写法
- //写法一:用应dao获得bean;这里getBean括号内填写的是对应spring的配置件文中bean标签的id性属名
- HelloDao helloDao1 = (HelloDao) context.getBean("helloDaoImpl");
- //还可以这么写:但是一般不这么写,因为java中都是面向口接编程,所以声明的时候尽量声明口接的类型而不是现实类的类型
- HelloDaoImpl helloDaoImpl1 = (HelloDaoImpl) context.getBean("helloDaoImpl");
- //写法二:一样用应dao获得bean,官网这么写,较比范规的写法
- HelloDao helloDao2 = (HelloDao) context.getBean("helloDaoImpl",HelloDaoImpl.class);
- //还可以这么写:但是一般不这么写,因为java中都是面向口接编程,所以声明的时候尽量声明口接的类型而不是现实类的类型
- HelloDaoImpl helloDaoImpl2 = (HelloDaoImpl) context.getBean("helloDaoImpl");
- //用应service和serviceImpl的写法
- //写法三:用应service获得bean
- HelloService helloService1 = (HelloService) context.getBean("helloServiceImpl");
- //还可以这么写:但是一般不这么写,因为java中都是面向口接编程,所以声明的时候尽量声明口接的类型而不是现实类的类型
- HelloServiceImpl helloServiceImpl1 = (HelloServiceImpl) context.getBean("helloServiceImpl");
- //写法四:一样用应service获得bean,官网这么写,较比范规的写法
- HelloService helloService2 = (HelloService) context.getBean("helloServiceImpl",HelloServiceImpl.class);
- //还可以这么写:但是一般不这么写,因为java中都是面向口接编程,所以声明的时候尽量声明口接的类型而不是现实类的类型
- HelloServiceImpl helloServiceImpl2 = (HelloServiceImpl) context.getBean("helloServiceImpl",HelloServiceImpl.class);
- helloService2.sayHello();
- }
- }
- HelloServiceImpl类;要需注意的是serviceImpl中的
- package www.csdn.spring.service.impl;
- import www.csdn.spring.dao.HelloDao;
- import www.csdn.spring.service.HelloService;
- publicclass HelloServiceImpl implements HelloService{
- private HelloDao helloDao;
- public HelloServiceImpl() {
- System.out.println("HelloServiceImpl实例化");
- }
- //set依附注入很主要,不写会报错,不能读写helloDao这一性属
- /*
- * org.springframework.beans.NotWritablePropertyException: Invalid property 'helloDao' of bean class
- */
- publicvoid setHelloDao(HelloDao helloDao) {
- System.out
- .println("制控转反:用应程序本身不在责负建创helloDao对象,而是由spring容器责负建创、管理、维护,这样制控权转移,称为转反。"
- + "可以通过依附注入方法注入该HelloDao对象");
- this.helloDao = helloDao;
- }
- @Override
- publicvoid sayHello() {
- helloDao.sayHello();
- }
- }
- </SPAN>
文章结束给大家分享下程序员的一些笑话语录:
祝大家在以后的日子里. 男生象Oracle般健壮; 女生象win7般漂亮; 桃花运象IE中毒般频繁; 钱包如Gmail容量般壮大, 升职速度赶上微软打补丁 , 追女朋友像木马一样猖獗, 生活像重装电脑后一样幸福, 写程序敲代码和聊天一样有**。