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()】,具有前置通知和后置通知功能,异常通知也可以一起放进来异常通知:引介通知:
转载于:https://www.cnblogs.com/dgq-blog/p/6697521.html
相关资源:spring学习视频(传智播客)