spring学习
Posted Mr_邓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring学习相关的知识,希望对你有一定的参考价值。
1.Spring:用来管理对象(创建与销毁),以及对象与对象之间的依赖关系,一般用来集成其它优秀的框架。
2.Spring MVC:控制层的框架,取代struts2。
3.SSH(struts2,spring,hibernate),SSM(spring,spring mvc, mybatis)
4.Spring框架的核心思想:IOC【依赖注入/控制反转,使层与层之间解耦】和AOP【面向切面(方面)的编程,去除冗余代码】
5.Spring几个重要模块
Core:通过BeanFactory来管理对象,通过IOC依赖注入来管理对象与对象之间的关系。
Aop:spring面向切面的编程。
Dao:spring内部提供的持久层技术。
Spring web Mvc:spring内部提供的控制层技术。
ORM:spring提供对hibernate,mybatis等orm框架做良好的支持。
------------IOC---------------------------------------
6. bean的创建方式:构造器方式(默认),静态工厂方式,普通工厂方式
7. bean属性的注入方式:构造器注入(默认无参构造器注入)、setter方式注入、Spring组件注入(使用ref)、集合注入
7.1.构造器注入(默认无参构造器注入),可以使用带参构造注入
<bean id ="dog" class="com.chinasofti.vo.Dog">
<!-- 使用索引 -->
<!--
<constructor-arg index="0" value="点儿点儿"></constructor-arg>
<constructor-arg index="1" value="2"></constructor-arg>
-->
<!-- 使用属性名 -->
<constructor-arg name="dogName" value="点儿点儿"></constructor-arg>
<constructor-arg name="dogAge" value="2"></constructor-arg>
</bean>
7.2.setter方式注入
<bean id="emp" class="com.chinasofti.vo.Emp">
<property name="empName" value="张三"></property>
<property name="age" value="2"></property>
</bean> -->
7.3.Spring组件注入
<bean id="book" class="com.chinasofti.vo.Book">
<property name="bookId" value="1001"></property>
<property name="bookName" value="Spring"></property>
</bean>
<bean id="emp" class="com.chinasofti.vo.Emp">
<property name="empName" value="张三"></property>
<property name="age" value="2"></property>
spring组件的注入
<property name="book" ref="book"></property>
</bean>
7.4.集合注入
<bean id="emp" class="com.chinasofti.vo.Emp">
<property name="empName" value="张三"></property>
<property name="age" value="2"></property>
<!-- spring组件的注入 -->
<!-- <property name="book" ref="book"></property> -->
<!-- 7.4.1.集合的注入-list -->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<!-- <ref bean=""/>
<null></null> -->
</list>
</property>
<!-- 7.4.2.集合的注入-map -->
<property name="map">
<map>
<entry key="001" value="100"></entry>
<entry key="002" value="200"></entry>
<entry key="003" value="300"></entry>
<!-- <entry key-ref="" value-ref=""></entry> -->
</map>
</property>
<!-- 7.4.3.集合的注入-set -->
<property name="set">
<set>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<!-- <ref bean=""/> -->
</set>
</property>
<!-- 7.4.4集合的注入-properties -->
<property name="properties">
<props>
<prop key="userName">sa01</prop>
<prop key="userPwd">sa</prop>
</props>
</property>
</bean>
------------AOP---------------------------------------
8.AOP使用到的代理
8.1CGLIB:定义一个类,子类去实现它,在执行方法之前做一件事,之后做一件事达到增强的效果。
8.2JDK动态代理:前提条件:提供一个接口。
配置实现一:bean对象的创建
<!-- 1.配置前置增强(通知) -->
<bean id="beforeAdvice" class="com.chinasofti.aop002.BeforeAdvice"></bean>
<!-- 2.配置后置增强(通知) -->
<bean id="afterAdvice" class="com.chinasofti.aop002.AfterAdvice"></bean>
<!-- 3.目标对象 -->
<bean id="student" class="com.chinasofti.aop002.Student"></bean>
配置实现二.1:使用普通的配置:将目标对象与配置实现一进行关联,在此期间需要使用到AOP的org.springframework.aop.framework.ProxyFactoryBean
<!-- 4.配置代理对象 (简化配置) p:target-ref:目标对象,p:interfaces:目标对象所对应接口,p:interceptorNames:目标对象用到的增强-->
<bean id="proxyStudent" class="org.springframework.aop.framework.ProxyFactoryBean"
p:interfaces="com.chinasofti.aop002.IStudent" p:target-ref="student"
p:interceptorNames="beforeAdvice,afterAdvice" />
配置实现二.2:使用正则表达式完成配置:
<!-- 把bean对象装入到 loginRegex进行过滤-->
<bean id="loginRegex" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<!-- .*匹配除换行符之外的0-N个字符 -->
<property name="pattern" value="com.chinasofti.aop003.UserDaoImpl.login.*"></property>
<property name="advice" ref="loginAroundAdvice"></property>
</bean>
<bean id="proxyUserDaoImpl2" class="org.springframework.aop.framework.ProxyFactoryBean"
p:target-ref="userDaoImpl"
p:interfaces="com.chinasofti.aop003.IUserDao"
p:interceptorNames="loginRegex"
></bean>
配置实现二.3:使用aop标签
<aop:config>
<!-- aop:pointcut,aop:advisor,aop:aspect -->
<aop:pointcut expression="execution(* com.chinasofti.aop004.UserDaoImpl.login(..))" id="reg"/>
<aop:advisor advice-ref="loginAroundAdvice2" pointcut-ref="reg"/>
<!-- <aop:aspect ref="userDaoImpl2" id="userDaoImpl2Aspect"></aop:aspect> 可以省略可以自动注入-->
</aop:config>
9.AOP专业术语名词
切面(aspect):提取出来的公用模块的公共代码(增强类)。
通知(advice):切面中具体的执行代码(切面类中的方法)--分为前置、后置、环绕、异常、引介。
连接点(joinPoint):对应于目标对象的中一个方法。
切入点(PointCut):通过execution表达式定义的一个连接点。
目标对象(target):通知起作用的对象(实现类)
代理对象(proxyFactoryBean):对目标对象起代理作用的。
10.配置文件可以有多个可以使用 <import resource="/applicationContext1.xml"/>完成整合。
11.execution(* com.chinasofti.*.*(..) ) :定义的切入点连接点的集合
第1个 *:不限制方法的返回值类型
第2个 *:代表com.chinasofti下面所有的类
第3个 *:代表com.chinasofti下面所有的类的方法
(..):方法的参数不做任何限制(方法的类型,还是方法的个数)
12.通知
前置通知:MethodBeforeAdvice
后置通知:AfterReturningAdvice
环绕通知:MethodInterceptor 【invoke()】,具有前置通知和后置通知功能,异常通知也可以一起放进来
异常通知:
引介通知:
以上是关于spring学习的主要内容,如果未能解决你的问题,请参考以下文章
springmvc学习总结 -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解
mybatis 学习二 MyBatis简介与配置MyBatis+Spring+MySql