spring学习(一)

it2022-05-11  58

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学习视频(传智播客)

最新回复(0)