spring总结

1、依赖注入或者控制反转的意义,减少类与类直接的调用耦合。通过调用bean的角度为控制反转,通过容器的角度为依赖注入。类里依赖的是接口,接口通过配置文件注入实现类。

2、注入方法:1)、设置注入<property name = "属性名" ref="bean名"2)、构造注入  <constructor-arg ref="bean名称">   区别:注入的时机不同,设置为先通过无参数构造方法创建实例,再通过set方法注入;构造注入,是通过调用有参数的构造器创建实例。

3、容器

1)、beanfactory接口默认实现是DefaultListableBeanFactory.  实例化 步骤:共3步。

ClassPathResource res=new ClassPathResource("beans.xml");
DefaultListableBeanFactory factory=new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(res);
Performer performer=(Performer) factory.getBean("dancer");
performer.perform();

2)、ApplicationContext接口是beanfactory子接口,常用实现是:FileSystemxmlApplicationContext、ClasspathXmlApplicationContext

4、ApplicationContext接口默认加载的singleton bean(默认不配置作用域) 是预初始化的

5、继承applicationEvent实现事件类的编写,实现applicationListener接口完成监听器的编写。  实现原理

6、applicationContextAware、beanFactoryAware实现接口完成让bean获取容器;BeanNameAware实现接口完成获得部署配置该bean时的ID  实现原理 通过在bean实例化时,判断bean是否实现了接口如果实现了通过反射调用接口的方法完成set赋值。

7、bean的范围:singleten、prototype、request、session,全局 session

8、容器在web的启动:1)、web.xml配置

 <listener>

<listenner-class>org.springframework.web.context.ContextLoaderListener</listenner-class>        ???实现原理

  </listener>

如果有多个文件需要载入配置方法:

<context-param>
<param-name>contextConfigLocation</param-value>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

9、beanfactory与applicationContext初始化bean的时机不同,beanFactory在需要bean时才创建,后者默认预初始化singleton域的实例。

10、bean的三种创建方法:1)、调用构造器创建、2)、调用静态工厂方法创建<bean id="" Class=“静态工厂类" factory-method="方法">  3)、调用实例工厂方法创建

bean实例初始化方法<bean id="" factory-bean=“" factory-method="方法">

11、假如A依赖B,容器默认会先初始化被依赖bean B然后再将bean注入 A,然后再返回A。显示强调依赖关系:depends-on="bean名"。

12、bean的生命周期

初始化周期顺序:

1)、实例化被依赖bean 默认构造方法

2)、实例化主调bean 默认构造方法

3)、调用注入方法

4)、调用实现的BeanNameAware接口、调用实现的ApplicationContextAware接口

5)、调用init-method方法

销毁周期顺序

1)、调用destroy-method=""

13、协调作用域不同步的bean。例如A 依赖B,但是B为prototype作用域要求每次调用必须为新的,A为默认singleten,如果按照通常的配置会导致每次通过A调用的B都是同一个单例。解决办法:

1、不用依赖注入。 对A中的B不配置依赖注入,通过程序代码getBean(“”)方法获取bean然后再赋值。   或者把A 中 B定义为 ThreadLocal类型的

2、通过1)、把主调A定义为抽象类,并定义一个抽象方法获取被依赖的bean2)、在A的配置文件方法中 加入<lookup-method name=""  bean="" /> 这样spring会通过动态增强方式来实现抽象方法解决注入赋值。

14、FactoryBean应用

实现FactoryBean接口,实现getObject方法返回该工厂生产的Bean实例;实现Class  getObiectType 返回Bean的实现类;实现isSingleton()接口返回是否单例模式。

        主要应用于一些复杂类的实例化,和通过模板包装有第三方实现getObject方法返回实例。

BeanFactory是容器

15、Bean后处理器

实现接口BeanPostProcessor接口的postProcessBeforeInitialization 方法、postProcessAfterInitialization方法

        作用时机:在注入依赖关系后,和调用ini-method方法前和 调用ini-method方法后。

作用域:所有bean

注意:applicationContext会自动检查bean后处理器,beanFactory需要注册

16、容器后处理器

通过实现BeanFactoryPostProcessor接口的postProcessBeanFactory(beanFactory)方法实现。通常用法是在XML解析beandefinition后,对beandefiniton进行进行加工然后再注册beandefiniton信息到map保存。

16、访问资源:resourse接口--实现类、resouseLoad接口得到getresouse,ApplicationCentext默认实现了resouseLoad接口。resourse接口不同的实现类应用了策略模式。

17、AOP,1、定义切面类 @AspectJ 2、实现切面增强方法  3、定义切入点表达式策略

18、AOP 使用配置: 1开启支持AspectJ注解  @AspectJ  2、???配置bean后处理器进行解析增强bean

19、Before 目标执行前运行

AferReturning 只在目标方法成功完成

Afterthrowing  目标方法抛出未处理的异常  @AfterThrowing(throwing="ex",pointcut="execution(* org.service.imp.*.*(..))")

After  不管目标方法如何结束

Around 环绕增强处理    ProceedingJoinPoint 

JoinPoint   Object[] getAtgs(); Signature getSignature();Object getTarget();Object getThis();

20、AOP XML配置文件配置

<aop:config>
<!-- 定义一个切入点:myPointcut
通过expression指定它对应的切入点表达式 -->
<aop:pointcut id="myPointcut" 
expression="execution(* org.crazyit.app.service.impl.*.*(..))"/>
<aop:aspect id="afterThrowingAdviceAspect"
ref="afterThrowingAdviceBean">
<!-- 定义一个AfterThrowing增强处理,指定切入点
以切面Bean中的doRecoveryActions()方法作为增强处理方法 -->
<aop:after-throwing pointcut-ref="myPointcut" 
method="doRecoveryActions" throwing="ex"/>
</aop:aspect>
</aop:config>

21、Spring的事务

PlataformTransactionManaget接口 要实现方法:

  TransactionStatus getTransaction(TransactionDefinition definition)

void commit(TransactionStatus status)

void rollback(TransactionStatus status)

22、事务的两种管理方式

1)、直接通过容器获取transactionManagerBean实例,(PlataformTransactionManaget接口的实现类)通过该接口的三个方法来开始事务、提交事务、回滚事务。

2)、声明式事务管理:在目标方法之前织入开始事务,在目标方法之后织入结束事务。

23、事务的5种隔离级别,默认DEFAULT使用数据库的默认隔离级别;事务的传输机制,默认required  详情参见:Spring五个事务隔离级别和七个事务传播行为总结

24、AOP总结

1)目标类的所有方法都添加了性能监视横切逻辑,而有时,这并不是我们所期望的,我们可能只希望对业务类中的某些特定方法添加横切逻辑; 
2)我们通过硬编码的方式指定了织入横切逻辑的织入点,即在目标类业务方法的开始和结束前织入代码; 
3)我们手工编写代理实例的创建过程,为不同类创建代理时,需要分别编写相应的创建代码,无法做到通用。 

以上三个问题,在AOP中占用重要的地位,因为Spring AOP的主要工作就是围绕以上三点展开:Spring AOP通过Pointcut(切点)指定在哪些类的哪些方法上织入横切逻辑,通过Advice(增强)描述横切逻辑和方法的具体织入点(方法前、方法后、方法的两端等)。此外,Spring通过Advisor(切面)将Pointcut和Advice两者组装起来。有了Advisor的信息,Spring就可以利用JDK或CGLib的动态代理技术采用统一的方式为目标Bean创建织入切面的代理对象了。 

25、Spring基础知识贴链接

26、Spring面试题 这个地址下面有很多Spring题 https://blog.csdn.net/samjustin1/article/details/52137062

27、Spring 学习:https://blog.csdn.net/u011734144/article/details/72600932   https://blog.csdn.net/elim168/article/details/78445835

spring只对非检查异常进行回滚,如果指定特定的checked异常时自动回滚事务,通过rollback-for=“异常类名”

spring 支持对具体类生产代理,只要设置proxyTargetClass属性为true。

事务注解:
1、启用注解配置事务要在XML配置文件配置如下:
<tx:annotation-driven transaction-mangager="transactionManager"/>
2、@Transactional修饰Bean类,表明对整个bean类起作用。
3、@Transactional修饰类方法,表明事务只对该方法起作用。

4、@Transactionnal (propagation.REQUIRED,isolation=Isolation.DEFAULT,timeout=5)

Spring注入集合
private List<string> schools
<property name="shools">

    <list>

        <value>小学</value>
        <value>中学</value>
    </list>

</property>
Map<String,Axe> phaseAxes;
<property name="phaseAxes">
    <map>
        <entry key="原始社会“ value-ref="stoneAxe"/>
        <entry key="农业社会“ value-ref="steelAxe"/>
    </map>
</property>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值