当前位置:首页 > spring学习笔记
spring学习笔记
【篇一:spring学习笔记】
4.主要内容:
从下向上看spring的主要内容: test:spring支持junit单元测试
核心容器(ioc):bean(bean工厂,创建对象)、core(一切的基础)、context(上下文)、spel(spring的表达式语言); aop:aop、aspects
对数据访问的支持:jdbc、orm、transaction、jms(java邮件服务) 对web的支持:spring mvc
5.ioc--inversion of control控制反转:
首先引用一篇文章的内容,简单了解一下dao和service层,controller层、view层(),另一篇文章对spring ioc设计思想的总结比较全面和通俗易懂;
第一步:定义dao接口userdao
package cn.sxt.dao;//降低耦合性public interface userdao { public void getuser();}第二步:定义dao接口的实现类userdaomysqlimpl和userdaooracleimpl userdaomysqlimpl:
package cn.sxt.dao.impl;import cn.sxt.dao.userdao;public class userdaomysqlimpl implements userdao { @override public void getuser(){ system.out.println(mysql获取用户数据);}userdaooracleimpl:
package cn.sxt.dao.impl;import cn.sxt.dao.userdao;public class userdaomysqlimpl implements userdao { @override public void getuser(){ system.out.println(mysql获取用户数据);}第三步:定义service层接口userservice,实现具体的业务
package cn.sxt.service;public interface userservice { public void getuser();}第四步:定义service接口的实现类
userserviceimpl,service层的业务实现,具体要调用到已定义的dao层的接口
我们传统的javase设计思想,代码是这样组织的:我们直接在对象内部(应用程序本身)通过new进行创建对象,是程序主动去创建依赖对象
package cn.sxt.service.impl;import cn.sxt.dao.userdao;import cn.sxt.service.userservice;public class userserviceimpl implements userservice{ //直接依赖(耦合) private userdao userdao=new userdaomysqlimpl(); @override public void getuser(){ userdao.getuser();}在我们的测试类test(可以理解成客户端)中
package cn.sxt.test;import
cn.sxt.dao.impl.userdaomysqlimpl;import cn.sxt.dao.impl.userdaooracleimpl;import
cn.sxt.service.impl.userserviceimpl;//原来是在userserviceimpl中创建userdao对象(应用程序本身)//现在是客户端(调用端)来创建public class test { public static void main(string
args[]){ userserviceimpl userservice=new userserviceimpl(); userservice.ge
tuser();}如果需要替换dao接口的具体实现类的时候,我们需要将userserviceimpl中的
private userdao userdao=new userdaomysqlimpl();修改为: private userdao userdao=new userdaooracleimpl();控制反转(ioc)的设计思想,我们不需要应用程序本身来创建对象,而是将创建对象的任务交付给ioc容器:此时,我们在userserviceimpl可以这样编写代码
package cn.sxt.service.impl;import cn.sxt.dao.userdao;import cn.sxt.service.userservice;public class userserviceimpl implements userservice{ //直接依赖(耦合) // private userdao userdao=new userdaomysqlimpl(); //瞬间隔离开来 private userdao userdao=null; public void setuserdao(userdao userdao) { this.userdao = userdao; @override public void getuser(){ userdao.getuser();}添加一个set方法,当调用端需要创建对象的时候,创建具体实现类的对象,此时我们在test类中就可以这样组织代码:
package cn.sxt.test;import
cn.sxt.dao.impl.userdaomysqlimpl;import cn.sxt.dao.impl.userdaooracleimpl;import
cn.sxt.service.impl.userserviceimpl;//原来是在userserviceimpl中创建userdao对象(应用程序本身)//现在是客户端(调用端)来创建public class test { public static void main(string
args[]){ userserviceimpl userservice=new userserviceimpl(); userservice.setuserdao(new userdaomysqlimpl());
userservice.getuser(); system.out.println(-----分割线------); userservice.setuserdao(new userdaooracleimpl()); userservice.getuser();}test测试类运行结果:
mysql获取用户数据-----分割线------oracle获取用户数据view code 通过上面的例子:
1).对象由原来程序本身创建,变为了程序接收对象 2).程序员主要精力集中与业务的实现
3).实现了service和dao的解耦工作,没有直接依赖关系,层与层之间实现了分离(service和dao没有关系,完全分离)
4).如果dao的实现发生改变,应用程序本身不用改变(更改spring的配置文件)
【篇二:spring学习笔记】
1.在java开发领域,spring相对于ejb来说是一种轻量级的,非侵入性的java开发框架,曾经有两本很畅销的书《expert one-on-one j2ee design and development》和《expert one-on-one j2eedevelopment without ejb》是java高手进阶必看的宝典,spring就是从这两本书的理论发展起来的。 spring主要核心是:
(1).控制反转(ioc):以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getinstance等直接或者间接调用构造方法创建一个对象,而在spring开发模式中,spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用spring为我们提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用spring时我们就不需要关心通过何种方式实例化一个对象,spring通过控制反转机制自动为我们实例化一个对象。
(2).依赖注入(di):spring使用java bean对象的set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的 的过程就是依赖注入的基本思想。
(3).面向切面编程(aop):在面向对象编程(oop)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类 的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
2.在spring中,所有管理的对象都是javabean对象,而
beanfactory和applicationcontext就是spring框架的两个ioc容器,现在一般使用applicationncontext,其不但包含了beanfactory的作用,同时还进行更多的扩展。 实例化spring ioc容器的简单方法: (1).方法1: (2).方法2:
2.spring多个配置文件组合方法:
很多时候,由于spring需要管理和配置的东西比较多,如果都放在一个配置文件中,配置文件会变的比较大,同时不方便与维护,一般好的做法是按照功能模块将spring配置文件分开,例如:dao层配置到一个spring-dao.xml配置文件中,service层配置到spring-service.xml文件中,struts的action配置到spring-action.xml文件中,然后通过下面两种办法将这些分散的配置文件组合起来:
(1).方法1:在一个作为spring总配置文件中的 bean 元素定义之前,通过 import 元素将要引入的spring其他配置文件引入,例如: (2).方法2:
a.对于javase的工程,当使用下面方法获取applicationcontext对象时将所有的spring配置文件通过数组传递进去,也可以使用通配符如spring-*.xml方式。
b.对于javaee工程,在web.xml文件中指定spring配置文件时可以指定多个,中间有逗号“,”分隔,也可以使用通配符方式。 3. spring配置文件bean的配置规则:
(1).一个bean可以通过一个id属性惟一指定和引用,如果spring配置文件中有两个以上相同的id时,spring会报错id冲突。 (2).一个bean也可以通过一个name属性来引用和指定,如果
spring配置文件中有两个以上相同name的bean,则spring通过name引用时,运行时后面的会自动覆盖前面相同name的bean引用,而不会报错。
4.spring依赖注入3种方式:
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,spring的依赖注入有3种方式: (1).使用构造器注入:
共分享92篇相关文档