Spring IOC

使用注解实现Bean管理
注解类型:
@Component:spring定义的通用注解,可用于注解任何bean
@Repository, @Service,@Controller三者属于@Comonent的子注解
@Repository:通常用于注解DAO类,即持久层。
@Service:通常用于Service类,即服务类。
@Controller:通常用于Controller类,即控制层(MVC类)(springMVC)
 
@Required, @Autowired, @Qualifier, @Resource
@Configuration, @Bean, @Import, @DependsOn
 
元注解:注解的注解
 
类的自动检测和Bean的注册
spring能自动检测并注册bean到ApplicationContext中
如果类被被注解了@Repository,@Service,@Controller,Spring将自动检测到并将该Bean注册到ApplicationContext中
 
<context:annotation-config/>:提供了在XML文件中配置Spring注解的方式(请注意包含上下文命名空间)
如:<context:component-scan/>包含<context:annotation-config/>通常在使用前者后,不用再使用后者,前者包含后者的功能,后者只扫描方法字段。
    <context:component-scan base-package="org.example"/>base-package指定了org.example下的所有类(扫描路劲)
 
<beans>
    <context:component-scan base-package="org.example">
        <!--包含过滤器:包含所有以下正则所匹配的注解-->
        <context:include-filter type="regex"   
                expression=".*Stub.*Repositoty"/>
        <!--排除过滤器:排除基于以下ort.springfarmework.stereotype.Repository类的所有注解-->
        <contex:exclude-filter type="annotation"
                expression="ort.springfarmework.stereotype.Repository"/>
    </context:component-scan>
</beans>
注意:只有被注解了@Component.@Repository,@Service,@Controller或者自定义@Component的注解的类才能被扫描。
 
定义一个通过注解自动注册的bean类的方法:
1、在Bean类上添加 @Component.@Repository,@Service,@Controller或者自定义@Component的注解(通过注解的属性可以修改Bean的id,默认为Bean类的首字母小写的类名)
2、通过实现BeanNameGenerator接口并在实现类中添加一个无参构造器来自定义BeanID(在xml配置中,
        必须设置实现类的值如:<context:component-scan base-package="org.example" name-generator="org.example.myNameGenerator"/>)
3、使用注解实现Bean作用域配置:
    使用@Scope注解,拥有一个属性,值为:prototype、singleton(default:表示某一个ioc容器中为单例)...详见xml配置教程。
    (2:实现ScopeMetadataResolver接口并提供无参构造器,来自定义scope策略。
            必须通过xml配置实现类 <context:component-scan base-package="org.example" name-resolver="org.example.myNameGenerator"/>
4、设置Bean类代理方式:通过xml scoped-proxy指定,有no、interfaces、targetClass三个可选值。??
5、@Required:对于被注解的setter方法,必须在xml配置文件中配置。
6、@Autowired:对setter方法是用byType方式自动装配,对属性可以使得setter方法被去除,自动装配。对构造器:自动装配
                @Autowired方法的属性:可设置require=false使得自动装配没有找到对应的类也不会报错。值得注意,拥有多个constructor的Bean中只能有一个constructor的require=true
 
 
Spring AOP
面向切面编程是OOP的补充,关注点在于横向的功能,不关注纵向的业务逻辑,是对通用功能的整合。
    切面:对关注点(如关注日志记录)的抽象,(那么切面就将会应用到需要日志记录的对象中)可以作用于多个对象
    连接点:程序中特定的点,能够连接到切面
    切入点:对应的一类连接点的的集合
    通知:相对于切入点之后执行的方法
    织入:将切面应用到特定对象并生成代理对象的过程
    目标对象:代理的目标对象
AOP的实现由静态织入(AspectJ)和动态代理(jdk动态代理/CGLIB动态代理:spring AOP)两种
Schema-base AOP 配置AOP
所有的切面和通知器都将放入<aop:config>中(可以配置多个该元素)
<aop:config>
    <!-- aspect 切面 将aBean作为切面声明 -->
    <aop:aspect id="myBean" ref="aBean">
    </aop:aspect>
 
    <!-- bussinessService1为切入点的id,匹配com.xyz.myapp.service包中所有类的所有方法 -->
    <aop:pointcut id="bussinessService1"  
        expression="execution(* com.xyz.myapp.service..(..))"/>
 
    <!-- bussinessService2为切入点的id,匹配com.xyz.myapp.service包中exampleclass类的bussinessService()方法 -->
    <aop:pointcut id="bussinessService2"  
        expression="execution(com.xyz.myapp.service.exampleclass.bussinessService(..))"/>
 
</aop:config>
 
<!-- 切面类 切面 将aBean作为切面声明-->
<bean id="aBean" class="org.example.ABean">
</bean>
<!-- 业务类 连接点所在 -->
<bean id="bBean" class="">
</bean>
 
配置切入点:匹配连接点
execution方法用来匹配方法执行的连接点
execution(public * *(..)) 切入点为执行所有的public方法时
execution(* set(..)) 切入点为执行所有的以set为开始的方法时
execution(* com.xyz.service.AccountService.*(..)) 切入点为执行所有com.xyz.service.AccountService类中的所有方法时
execution(* com.xyz.service..(..)) 切入点为执行所有com.xyz.service包中的所有类中的所有方法时
execution(* com.xyz.service...(..)) 切入点为执行所有com.xyz.service包及其子包中的所有方法时
 
//within用于匹配指定类型内的方法执行
within()
 
//this 用于执行匹配当前AOP代理对象类型的执行方法
this()
 
//target
//args
//@args
//within
//@target
......

配置切入点:

<aop:pointcut id="..." expression="...">

</aop:pointcut>

Spring基础复习的更多相关文章

  1. C语言基础复习总结

    C语言基础复习总结 大一学的C++,不过后来一直没用,大多还给老师了,最近看传智李明杰老师的ios课程的C语言入门部分,用了一周,每晚上看大概两小时左右,效果真是顶一学期的课,也许是因为有开发经验吧, ...

  2. Spring基础配置

    从毕业到现在我一直从事Android开发,但是对JavaEE一直念念不忘,毕业校招的时候,一个礼拜拿了三个offer,岗位分别是Android.JavaEE和JavaSE,后来觉得Android比较简 ...

  3. Spring知识点复习

    Spring知识点复习 一.专业术语 侵入式设计 引入框架,对现有的类的结构有影响,即需要实现或继承某些特定类.如:Struts框架 非侵入式设计 引入框架,对现有的类结构没有影响.如:Hiberna ...

  4. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  5. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  6. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  7. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  8. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  9. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

随机推荐

  1. MySQL使用和操作总结

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  2. 如何修改HTML5 input placeholder 颜色

    有三种实现方式:伪元素(pseudo-elements).伪类( pseudo-classes)和Notihing. WebKit和Blink(Safari,Google Chrome, Opera1 ...

  3. 20162330 实验二 《Java面向对象程序设计》 实验报告

    2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验二 <Java面向对象程序设计> 实验报告 课程名称:<程序设计与数据结构> 学生班级:162 ...

  4. Linux学习--线程概念

    线程 我们知道 ,进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,本节我们学习如何在一个进程的地址空间中执行多个线程.有些情况需要在一个进程中同时执行多个控制流程,这 ...

  5. (原创)不带模板的OLE输出EXCEL

    目前我已知的EXCEL输出方式有3种: 1.GUI_DOWNLOAD函数输出(适用于简单无格式要求的输出). 2.OLE输出(适用于对EXCEL格式输出有特殊要求的,但是因其填充数据和设置格式是基于一 ...

  6. react基础篇入门组件

    讲述一下React: 1.声明式设计-React采用声明范式,可以轻松描述应用 2.高效-React通过DOM模型,最大限度的减少dom的交互 3.灵活-React可以与已知的库或框架很好的配合 4. ...

  7. postcss的安装与使用

    我是经过公司另外一个同事推荐的这个 他是一个资深的大哥哥  我觉得我确实需要跟多的学习和成长 而且我觉得我应该听他的话 多学学新知识 最近一直在做适配的网站 会出现很多媒体查询 我发现用这个写媒体查询 ...

  8. app测试中遇到问题总结

    工作总结: 1 这两天由于工作,需要进行抓包,使用了Charles,fidder,发现一个坑点: charles没有抓到返回值的时候,默认是不在列表显示请求信息的,能不能设置,我就不知道了,但是可以在 ...

  9. List集合就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识. 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是 ...

  10. sts 和 lombok

    1.安装lombok.jar到sts.exe所在目录 如果是eclipse,需要放到eclipse.exe所在目录,同理myeclipse. 2.修改sts.ini配置使用lombok 如果是ecli ...