Spring框架总结

来源:互联网 发布:java九大排序算法 编辑:程序博客网 时间:2024/05/23 14:02

spring基本概念
1)struts2是web框架,hibernate是orm框架
2)spring是容器框架,创建bean,维护bean之间的关系
3)spring可以管理web层,持久层,业务层,dao层,spring可以配置各个层的组件,并且维护各个层的关系

spring核心原理
内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。

Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。

Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)

要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式), Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.

1.IOC控制反转
概念:控制权由对象本身转向容器,由容器根据配置文件创建对象实例并实现各个对象的依赖关系。
核心:bean工厂,在Spring中,bean工厂创建的各个实例称作bean

2.AOP面向切面编程
a.静态代理
根据每个具体类分别编写代理类
根据一个接口编写一个代理类
b.动态代理
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类

动态代理:
不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的Method,调用装备的invoke方法,将动态代理、 Method、方法参数传与装备的invoke方法,invoke方法在唤起method方法前或后做一些处理。

1、产生动态代理的类: java.lang.refect.Proxy
2、装备必须实现InvocationHandler接口实现invoke方法

简单的Spring入门案例
1.编写一个类:UserService

package com.cloud.service;  public class UserService {      private String name;      public String getName() {          return name;      }      public void setName(String name) {          this.name = name;      }      public void sayHello(){          System.out.println("hello:"+name);      }  }

2.编写核心配置文件:applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"      xmlns:context="http://www.springframework.org/schema/context"  />    <!-- 在容器中配置bean对象 -->      <!-- 下面这句等价于:UserService userService = new UserService() -->      <bean id="userService" class="com.cloud.service.UserService">          <!-- 等价于:userService.setName("SpringName"); -->          <property name="name">              <value>SpringName</value>          </property>      </bean>  </beans>  

3.编写测试类:Test

package com.cloud.test;  import org.springframework.context.ApplicationContext;  import org.springframework.context.support.ClassPathXmlApplicationContext;  import com.cloud.service.UserService;  public class Test {      public static void main(String[] args) {          ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");          UserService userService = (UserService) ac.getBean("userService");          userService.sayHello();      }  }

spring的三种注入方式是什么?
setter
interface
constructor

spring原理总结
1.使用spring ,没有new对象,我们把创建对象的任务交给spring框架
2.spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.

参考博客:
http://www.cnblogs.com/zhoudi/p/5820513.html
http://blog.csdn.net/dzy21/article/details/51737265