Spring基础

一, 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>


 

     

 

 

   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值