spring framework
core container核心容器
aop面向切面编程
ioc依赖注入
用户可以按照自己的需要,去定制spring功能模块。
achema文件夹内分了模块信息。
软件应用分层架构
标准三层架构:
1.数据访问层
2.业务逻辑层
3.表示层
web层
services层
dao层
高内聚低耦合
public class LoginServlet{ private UserServlet userService; public void doGet() { userService.login(); } } public class UserServlet{ public void login() { System.out.println("登陆程序"); } }解决方式:面向接口。
public interface IUserService{ public void login(); } public class UserServlet implements IUserService{ public void login() { System.out.println("登陆程序"); } } public class LoginServlet{ //接口的引用可以指向接口的任何一个实现类对象 private IUserServlet userService=new UserService(); public void doGet() { userService.login(); } }
spring解决的方法;降耦。
依赖关系:
D d=new D(); C c=new C(); c.setD(d); B b=new B(); b.setc(c); A a=new A(); a.setB(b);spring解决的问题:简化复杂的依赖关系
事务处理:service
spring解决的问题:处理事务
轻量级:想用哪个就用哪个,不用就添加
容器:可以管理项目中各种对象的生命周期(对象的创建,初始化,使用,销毁)
在使用spring框架的时候,项目中的代码里面,可以不出现任何spring 相关的api。(非侵入的)
容器:container
1.GUI
2.servlet/jsp
3.spring
bean对象:谁是bean对象?
bean包。实体类,配置给spring的类
需求分析
2.为什么要让对象成为spring容器中的bean对象,
因为spring容器管理这些对象之后,spring容器可以负责这些对象的创建,初始化,销毁,对象与对象之间建立关系。
corejava 数组/集合
spring模块:
spring core(spring核心容器)ioc控制反转
spring context(上下文)
spring web
spring DAO()
spring ORM():映射框架,与hibernate,mybatis结合的框架模块
AOP(面向切面编程)
Spring mvc(代替serlvet)
ioc inversion of control控制反转
思考1:是什么东西的控制被反转了,
思考2:自己组装电脑和直接购买整机的区别。
总结:ioc将你设计好的类交给spring容器去控制,而不是在类的内部进行控制。
2.堆积木
3.ioc容器并没有写对象和对象是什么关系,而是把这种关系的建立交给ioc容器去做,并在代码运行的时候动态建立起来。
4.ioc其实就是将调用者与被调用者分离的思想。
DI : dependency injection依赖注入
表示让调用类对某一接口实现类的依赖关系由容器注入,以移除调用类对某一接口实现类的依赖。
web service servlet IUserService UserServiceImp
IUserServices service=new UserServiceImp (); #由容器来注入
DL: dependency loopup 依赖查找
容器创建对象并提供回调接口和上下文环境给这个对象需要时通过接口从容器中查找其他对象。
spring IOC核心api
BeanFactory接口:用于bean的初始化和配置
Object getBean(String name) :根据指定名称返回一个bean实例
boolean isPrototype(String name); 判断其是否是原型模式
boolean isSingleton(String name): 判断名称为name的bean是否是单例
ApplicationContext接口:继承于BeanFactory,增加事务处理,事件传递,
//寻找配置文件 String path="com/briup/ioc/set/set.xml" ApplicationContext container=new ClassPathXmlApplicationContext(path); container.getBean(name);set.xml是配置文件:
使用eclipse
1.改编码
window-最后一个-workspace-改编码
在配置文件导入schema文件(.xsd文件)这个文件可以在下载的spring文档中的示例中找到。在eclipse中把xml文件和schema文件关联后,xml中就可以有标签代码的提示了。spring框架是模块化的,之后使用其他模块的时候,还可以在添加其他的配置头文件。
set.xml文件
<!--set.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>ioc-set
alt+/ 有自动提示就配置成功了。
IOC的相关功能,
1.set方式注入(必须依赖set方法)
bean.xml测试文件
<beans> <bean name="stu" class="com.briup.theory.ioc.Student"></bean> <!-- class是全限定名-创建对象为stu --> <bean name="t" class="com.briup.theory.ioc.Teacher"> <property name="student" ref="stu"></property> <!-- property表示对象中的方法,有getstudent方法,和setstudent方法,引用(ref)stu对象 t中就得到stu的对象的方法,实现dl注入 --> </bean> </beans> java测试文件 /* * 创建对象,获取个对象之间的关系 Student s=new Student(); Teacher t=new Teacher(); t.setStudent(s); System.out.println(t); System.out.println(t.getStudent()); */ /** * 通过容器拿出想用的对象 */ BeanFactory container=new BeanFactory(); Teacher t=(Teacher)container.getBean("t"); System.out.println(t); System.out.println(t.getStudent());1.理解
2.印象
需要的是解决问题的思路
<!--追加set.xml文件--> <bean name="stu" class="com.briup.bean.Student"> <!-- 依赖注入 --> <property name="id" value="1"></property> <property name="name" value="tom"></property> <property name="age" value="20"></property> </bean>测试application类,关联源码,查看方法,outline查看方法 BeanFactory是核心接口。
单元测试依赖注入
@Test public void ioc_set() { try { String[] path = {"com/briup/ioc/set/set.xml"}; ApplicationContext container = new ClassPathXmlApplicationContext(path); Student stu=(Student)container.getBean("stu"); System.out.println(stu.getAge()); System.out.println(stu.getId()); System.out.println(stu.getName()); } catch (Exception e) { e.printStackTrace(); } }以上代码实现了spring的注入。