Spring基础

来源:互联网 发布:投针法计算圆周率c语言 编辑:程序博客网 时间:2024/05/22 14:23

一, Spring简介

面向bean的编程

企业级整合框架, 粘合济, 提供一站式的企业开发

不重复制造轮子, 与第三方框架完美的整合

 

 

二,IOC(重点)

1, IOC -- 控制反转 -- 主要解决类与类之间的依赖问题, 降低耦合度, 提高扩展性

DI -- 依赖注入,   

依赖由容器管理, 由容器创建bean对象, 在运行时把依赖注入  

默认在容器初始化时, 就会创建bean, 分析解决bean与bean之间的依赖  

 

控制反转: 程序本身不再负责依赖对象的创建, 而是把对象创建跟依赖的注入交给容器去完成

 降低程序之间的耦合度     

 

Bean的容器, 管理Bean的整个生命周期, 默认是单例的, 对于同一个bean, 多次从spring容器中获取对象, 获取都是同一个对象

 

 

 

2, 常用的注入类型

    set值注入--通过setter 方法实现注入, 设为不强制性注入

  为属性提供setter方法  

  通过  <propertyname="userDao" ref="userDao"/>配置属性

 

 构建器注入 -- 通过构建器实现注入, 一定要注入, 要不程序会报异常 

  提供带参的构建方法, 同时注意保留无参的构建方法, spring容器初始化bean时要调用无参构建方法  

    <constructor-argname="userDao" ref="userDao"></constructor-arg>

 

   工厂注入(spring不支持)

 

3, bean的作用域

singleton  单例, 默认  

prototype  多例的, 对同一个bean, 每一次获取, spring容器都会new一个新的对象  

   

 

只适应于WebApplicationContext环境:  

request  request, 每一次请求创建一个实例  

session session  

global session application范围  

 

 

4, 创建机制

BeanFactory 接口:  工厂模式的实现, 负责bean的创建, 要求的资源不是很大, 适用于资源有限的环境 

  1. <span style="font-family:SimSun;font-size:18px;">// 通过BeanFactory创建bean,具有延迟加载的作用,当用到的时候,再去创建  
  2.         Resource resource = new ClassPathResource("applicationContext.xml");          
  3.         BeanFactory beanFactory = new XmlBeanFactory(resource);  
  4.         UserService user3 = beanFactory.getBean("userService",  
  5.                 UserService.class);  
  6.         System.out.println(user3.getId());  
  7.         System.out.println(user3.getName());  
  8.         user3.printTest();</span>  

getBean() 从容器中取得bean的实例  

getTypes()  

containsBean()  

 

ApplicationContext 接口, 是BeanFactory的一个子接口, web程序一般就使用这个接口的实现类:  

ClassPathXMLApplicationContext  

<span style="white-space:pre"></span>ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");IUserService service = (IUserService) context.getBean("userService");System.out.println(service.checklogin("admin","123").getUsername());

n(service.checklogin("admin","123").getUsername());

FileSystemXMLApplicationContext  

 

  1.  ApplicationContext ctx2=new FileSystemXmlApplicationContext("spring.xml");  
  2.         UserService user2=ctx2.getBean("userService", UserService.class);  

 

  1. System.out.println(user2.getId());  
  2.         System.out.println(user2.getName());  

 

三, AOP--面向方面编程--核心: 动态代理模式

会使用spring提供的现有的功能,比如:配置性事务管理 

 

1, 本质: 通过动态代理, 动态往程序中方法的前后添加一些功能(代码)

动态代理: JDK--实现类必须实现接口  

 CGLIB -- 二进制包实现动态代理       

 

  

 

 

重点在以下图上:

 

2, 第一个例子

  

增强设计:

//把切面设计为一个一个的增强

<pre name="code" class="java">public classUserAdvice {      private Logger logger =Logger.getLogger(UserAdvice.class);      public void beforeService(JoinPoint joinpoint){           System.out.println("前置增强执行了");                } }         aop配置:      <aop:config>           <!-- 定义切入点, 帮我找到要增强的方法列表joinpints集合           * com.chinasofti.service.*.*(..) 找到com.chinasofti.service下所有类所有方法            -->           <aop:pointcutexpression="execution(* com.chinasofti.service.*.*(..))"id="userPointCut"/>                     <!-- 把 userAdvice定义为一个切面-->           <aop:aspectref="userAdvice">                 <aop:beforemethod="beforeService" pointcut-ref="userPointCut"/>           </aop:aspect>      </aop:config>


     

 

 

   

 

0 0