总结
Spring依赖注入
-
xml注入
- 在xml中配置,但是要有对应的setter方法,所以又叫属性注入或setter方法注入
-
注解注入
- 可以写在setter方法上,也可以是在字段上,字段上不需要setter方法
-
构造参数注入
-
普通参数
-
方式一:根据参数索引注入
<constructor-arg index="0" value="111">
-
方式二:根据参数名称注入
<constructor-arg name="id" value="222" />
-
方式三:根据参数类型注入(多个参数类型相同时会出问题)
<constructor-arg type="java.lang.String" value="小星"/>
-
-
当其中一个参数是对象时
-
外部引入
<bean id="youBean" class="cn.itsource._01_constructor.domain.YouBean"/> <bean id="myBean" class="cn.itsource._01_constructor.domain.MyBean"> <constructor-arg name="id" value="444"/> <constructor-arg name="name" value="小黑"/> <constructor-arg ref="youBean"/> </bean>
-
内部Bean完成
<constructor-arg> <bean class="cn.itsource._01_constructor.domain.YouBean"></bean> </constructor-arg>
-
-
参数是集合和数组时
-
private List otherBeanList;
<constructor-arg name="otherBeanList"> <list> <bean class="cn.itsource._01_constructor.domain.YouBean"/> <ref bean="youBean"/> </list> </constructor-arg>
-
private Set set;
<constructor-arg name="set"> <set> <value>小芳</value> </set> </constructor-arg>
-
private Properties props1;
<constructor-arg name="props1"> <props> <prop key="driver" >com.mysql.jdbc.driver</prop> <prop key="username" >root</prop> </props> </constructor-arg>
-
private String[] arrays;
<constructor-arg name="arrays"> <array> <value>zx</value> <value>ww</value> </array> </constructor-arg>
-
-
AOP
-
Spring实现Aop的两种方案
- JDK(对象实现了若干接口)
- CGLIB(没有实现任何接口)
-
Aop使用的时动态代理模式
-
xml实现Aop
<aop:config> <!--切点--> <aop:pointcut id="pointcut" expression="execution(* cn.itsource._03_aopxml_service.impl.*.*(..))"/> <!--切面--> <aop:aspect ref="txManager"> <!--前置通知--> <aop:before method="open" pointcut-ref="pointcut"/> <!--后置通知--> <aop:after-returning method="commit" pointcut-ref="pointcut"/> <!--异常通知--> <aop:after-throwing method="rollback" pointcut-ref="pointcut" throwing="e"/> <!--后置通知--> <aop:after method="close" pointcut-ref="pointcut"/> <!--环绕通知--> <--<aop:around method="around" pointcut-ref="pointcut"/> </aop:aspect> </aop:config>
-
注解实现Aop
-
配置文件
<!--扫描包--> <context:component-scan base-package="cn.itsource._04_aopanno_service"/> <!--支持aop注解--> <aop:aspectj-autoproxy/>
-
注解方式
package cn.itsource._04_aopanno_service; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; @Component @Aspect //aop注解 public class TxManager { @Pointcut("execution(* cn.itsource._04_aopanno_service.impl.*.*(..))") public void pointCut(){} @Before("pointCut()") public void open(){ System.out.println("事务开启"); } @AfterReturning("pointCut()") public void commit(){ System.out.println("事务提交"); } @AfterThrowing(value = "pointCut()",throwing = "e") public void rollback(Throwable e){ System.out.println("事务回滚"); System.out.println("异常情况:"+e.getMessage()); } @After("pointCut()") public void close(){ System.out.println("事务关闭"); } /*@Around("pointCut()") public void around(ProceedingJoinPoint joinPoint){ try { open(); joinPoint.proceed(); commit(); } catch (Throwable e) { rollback(e); e.printStackTrace(); } finally { close(); } }*/ }
-
创建Bean的四种方式
- 普通依赖注入
- 集成静态简单工厂
- 集成实例简单工厂
- 使用FactoryBean