首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Spring学习札记(一)

2012-09-20 
Spring学习笔记(一)?Spring的作用:能够降低组件之间的耦合度,实现软件之间的解耦可以使用Spring容器的众多

Spring学习笔记(一)

?

Spring的作用:

    能够降低组件之间的耦合度,实现软件之间的解耦可以使用Spring容器的众多服务,比如:事务管理器.当我们使用事务管理器时,开发人员不需要手动控制事务,也不需要处理复杂的事务传播.Spring容器提供单例模式的支持容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等.容器提供了很多辅助器,这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate等.Spring提供了主流应用框架的支持,如:集成Hibernate、JPA、Struts等,便于应用程序的开发

    Spring的核心技术是IoC(Inversion of Control)和AOP(Aspect-oriented programming).

    IoC还有另一个名字,叫DI(Dependency Injection),称为"依赖注入".所谓依赖注入就是指,在运行期间,由外部容器动态地将依赖对象注入到组件中.

    依赖注入有三种方式:

      使用构造器注入使用属性setter注入使用Field注入(利用注解)

    Bean的装配

    Spring提供三种实例化Bean的方式:

    使用类构造器的方式

    <bean id=”唯一标识符” class=”完整类名”></bean>

    使用静态工厂的方式

    <bean id="唯一标识符"

    factory-method="需要执行工厂的哪个方法的方法名" />

    使用工厂实例的方式

    <bean id=“唯一标识符1" factory-bean=“唯一标识符1"

    factory-method="需要执行工厂的哪个方法的方法名" />

    Bean在实例化的时候默认只有一个,不管获得几次,都是同一个Bean,不过Spring提供了修改Bean作用域的属性,有几种取值:

    singleton,prototype,request,session,global session.有几个都没什么用.

    除了配置的注入方式以外,还可以使用注解的方式进行注入,在JAVA代码中使用@Autowired或@Resource注解方式进行装配.不过在装配之前,需要引入context命名空间,虽然Spring支持注解的解析,但是默认解析的"开关"没有打开,必须在配置文件里添加<context:annotation-config />标签,这个标签隐式的注册了Spring对注解进行解析的处理器:

    AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,

    PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor

    @Autowired可以作用在构造器、字段和方法上,默认以类型进行查找,默认情况下它要求的依赖对象必须存在,如果可以允许不存在,则需要设置它的required属性值为false.如果想以名称进行查找,可以结合@Qualifier注解一起使用,如@Autowired @Qualifier("指定名称").@Qualifier注解还可以指定在构造器或者方法的参数在,如:

    @Autowired?
    public void setPersonDao(@Qualifier("personDao") PersonDao personDao) {//用于属性的set方法上?
    ????? this.personDao = personDao;?
    }

    @Resource可以作用在类、方法和字段上,默认以名称进行查找,如果找不到相应的Bean,则以类型进行查找.如果指定了name属性,则只按名称进行查找.

    另外,Spring还支持Bean的自动装配:

    <bean id=“foo” class=“...Foo”? autowire=“autowire type”>

    autowire的取值包含(byType,byName,constructor,autodetecte),只用了解就行了,不常用,以免出现不可预知的后果.

    此外,项目中通常会有上百个组件,如果这些组件全部采用在配置文件中通过Bean的方式来配置,则会明显增加配置文件的体积,查找和维护起来也会相关不便.所以,Spring2.5提供了自动扫描组件的方式来配置组件,它通过在类路径下寻找标了@Component、@Service、@Controller和@Repository注解的类,并把这些类纳入到Spring的容器中进行管理.

    要使用自动扫描机制,需要引入context命名空间,并且需要在配置文件里面加上:

    <context:component-scan base-package="包名"/>.

    这个标签将扫描指定包(含子包)下的所有组件.并且把AutowiredAnnotationBeanPostProcessor 和CommonAnnotationBeanPostProcessor隐式地被包括进来以进行注解解析.

    AOP--面向切面编程

    AOP代理对象

    如果目标对象实现了接口,则代理对象也实现同样的接口,否则使用cglib代理,则Spring有两种代理方式:

      若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

    备注:?

    对接口创建代理优于对类创建代理,因为这将产生更加松耦合的系统.

    标记为final的方法无法得到通知,Spring需要为目标类产生子类,需要覆写被通知的方法,然后将通知织入.final方法不允许被覆写.

    ?

    ?

    ?

    ?

    AOP中有几个概念,这些概念我们经常会用到,大数人也经常在程序中写出来,但是自己不知道:

    Jointpoint(连接点)

    连接点就是被拦截到的那个点,在Spring中,"点"指的是方法,因为Spring只支持方法类型的连接点.也就是说,哪个方法现在被拦截到了,我们就把这个方法称为连接点.

    Pointcut(切入点)

    切入点就是我们要拦截哪些连接点.比如你的工作是查水表,你负责的那个区域就是切入点,你现在正在查的那家,就是连接点.

    Advice(通知)

    通知就是拦截到连接点之后要做的事情,比如乘地铁,你不带包就不用安检,如果你带了包,就要安检(被拦截到了),然后X射线检查你的包就是一个通知.通知分为:前置通知,后置通知,最终通知,异常通知,环绕通知五种.

    Aspect(切面)

    是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容---它的功能、在何时和何地完成其功能,简单的说,通知所在的类,并且定义了切入点,那么这个类就是切面.

    Target(目标对象)

    需要代理的对象.

    Weaving(织入)

    把切面应用到目标对象来创建一个代理对象的过程就叫织入.

    Introduction(引入)

    引入就是在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

    ?

    更多信息请查看?java进阶网?http://www.javady.com

热点排行