Spring第2天

ONE-DAY
1.Spring框架的作用
   Spring是一个容器性质的框架.可以管理Bean对象的创建和销毁.
   Spring容器具有IoC和AoP特性.
2.Ioc和Aop的概念
IoC : Inverse of Controll 反向控制或控制反转.
AoP : Aspect of Programming 切面编程.
3.Spring容器的对象管理
 引入spring.jar和commons-logging.jar两个基本包.
   (1)创建容器配置文件,添加<bean>的定义
     <bean id="别名" class="包名.类名"/>
   (2)创建容器对象,获取bean对象
   ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
   ctx.getBean("别名");   PersonDAO personDAO = (PersonDAO)ctx.getBean("personDAO");
4.使用工厂方式创建对象
   *(1)容器通过反射创建
   (2)工厂方法
   (3)静态工厂方法
5.对象的生命周期
    (1)对象创建时机
    默认是在容器创建时,将对象创建出来.
    可以在<bean/>元素中使用lazy-init="true",将该对象指定为使用时创建.
    (2)指定对象初始化和销毁方法
   可以在<bean/>元素中使用init-method="方法名"指定初始化方法
   可以在<bean/>元素中使用destroy-method="方法名"指定销毁方法,此属性只对单例模式有效
      init方法在创建对象时执行,destroy方法在销毁容器时执行.
    (3)默认情况下,容器创建的对象的模式是一个单例模式.
   可以在<bean/>元素中使用scope指定创建模式.默认为singleton,可以指定为prototype
    如果应用于Web环境中,可以指定为request,session,global session
6.DI(依赖注入) Dependence Inject
    (1)setter方法注入(推荐使用)
        <property name="personDao" ref="personDao2"/>
    (2)构造方法注入
    <constructor-arg index="0" ref="personDao">
</constructor-arg>
    (3)注解方式注入(推荐使用,以后介绍)
   
TWO-DAY
1.--------集合属性注入---------- (参考文档3.3.2.4. 集合)
 注入Set,List,Map,Properties类型的属性值
2.----------注解方式配置--------------
 注解可以简化XML配置.
 (1)自动扫描(引入common-annotation.jar包)
a.首先在spring主配置文件中添加
  <context:component-scan base-package="包路径"/>    
    b.在class中使用注解,指定哪些Bean被纳入容器.
    @Component、@Controller、@Service、@Repository
  注意 : 扫描的组件默认别名为"类名首字母小写",
     可以在注解中指定别名,格式为:@Service("别名")
  (2)生命周期控制及scope创建模式
     @PostConstruct 等价于<bean/>元素中的init-method
     @PreDestroy 等价于<bean/>元素中的destroy-method
     @Scope("prototype")等价于<bean/>元素中的scope="prototype"属性
   (3)注入
     a. @Autowired : 按类型匹配注入.如果需要按照名称,可以使用@Qualifier("personDao")指定Bean别名
         @Autowired(required=false) : required属性表示该属性是否必须注入一个对象.
     b. @Resource : 默认先按名称,再按类型.如果需要按照名称,可以使用@Resource(name="personDao")
 注意:如果单独使用(2),(3)注解,需要在spring配置中添加
     <context:annotation-config/>
  如果使用(1),(2),(3)注解,只需要指定自动扫描配置就可以.
      <context:component-scan base-package="包路径"/>    
3.-------------AOP--------------------
  AOP:面向切面编程.是对OOP编程的提升,可改善程序结构.
主要思想是将共通处理封装成切面对象,利用Spring容器将切面对象
  作用到某一批目标对象之上。当执行目标对象方法时,会执行切面对象的功能.
  (1)相关概念
  a. 切面:用于封装共通处理(即关注点),将来用于横切多个目标对象
  b. 连接点:程序在调用时的某个特定点,比如方法调用或者异常处理.
  c. 切入点: 连接点的集合,一个连接点集合的表达式(与正则表达式相似)
  d. 通知:在连接点上执行的动作,比如前置通知,后置通知,异常通知,环绕通知,最终通知.
  e. 织入:把切面连接到其他应用程序类型或对象上.该过程在运行时完成.
  f.目标对象:目标对象
  g. AOP代理:Spring容器会为每一个目标对象动态创建一个AOP代理对象.
       由该对象执行切面处理方法和目标对象的方法
  
  try{
  执行前置通知方法
  //执行环绕通知前半部分处理
  执行目标对象方法
  //执行环绕通知后半部分处理
  执行后置通知方法
  }catch(){
  执行异常通知方法
  }finally{
  执行最终通知方法
  }
  
  (2)AOP示例(注意:引入aspectjrt.jar,aspectjweaver.jar,cglib-nodep-2.1_3.jar)
  execution - 匹配方法执行的连接点,
  这是你将会用到的Spring的最主要的切入点指示符。 
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)
          throws-pattern?)
任意公共方法的执行:
execution(public * *(..))
任何一个名字以“set”开始的方法的执行:
execution(* set*(..))
AccountService接口定义的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
在service包中定义的任意方法的执行:
execution(* com.xyz.service.*.*(..))
在service包或其子包中定义的任意方法的执行:
execution(* com.xyz.service..*.*(..))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值