applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd ">     
</beans>




spring是开源的轻量级一站式框架

 1、开源的
 2、轻量级
3、一站式


spring在j2ee三层结构中,每一层都提供不同的解决技术
(1)web层:springmvc
(2)service层:spring的ioc
(3)dao层:spring的jdbcTemplate

spring的IOC和DI操作


 ioc控制反转-->底层技术{ xml配置文件,dom4j解析xml,工厂设计模式,反射}

 1、把对象的创建交给spring进行管理
 2、ioc操作两种方式:
 (1)ioc的配置文件方式(掌握)
     bean的实例化(三种方式)

    ①无参构造方法实例化(重点)


<bean id="user"class="com.yb.User"></bean>
bean标签常用属性:
    id属性:根据id值得到配置对象,不能包含特殊字符。
    class属性:创建所在类的全路径。
    name属性:功能和id一样,但能包含特殊字符。
    scope属性:(
    singleton:默认值(缺省值),单例
        prototype:多例
        request:创建对象把对象放到request域里面
        session:创建对象把对象放到session域里面
        globalSession:创建对象把对象放到globalSession里面
    )




     

 ②使用静态工厂创建(了解)

   ③使用实例工厂创建(了解)

 (2)ioc注解方式注入(重点)

<!-- 扫描属性上面的注解(被下面的扫描方式取代) -->
<context:annotation-config></context:annotation-config>
<!-- 到包里面扫描:类、方法、属性上面的注释 -->
<!-- 若要扫描com.yb.entity、com.yb.dao ...里面的注解可写成com.yb-->
<context:component-scan base-package="com.yb"></context:component-scan>


 

 在创建对象的类上面使用注解实现


    ①@Component 衍生出下面三个注解 用法相同

 ②@Controller :WEB层

 ③@Service :业务层

 ④@Repository 持久层

@Component(value="user")
public class User {}

  创建对象是多实例还是单实例

@Component(value="user")
@Scope(value="prototype")
public class User {}


DI:属性注入

 属性注入四种种方式: -->spring支持前三种注入方式

  1、set方法注入(重点)
 

<bean id="user" class="com.yb.User">
<property name="name" value="youngboy"></property>
<!-- 对象注入 -->
<property name="men" ref="person"></property>
<!-- 复杂类型注入 -->
<!-- 数组 -->
<property name="arrs">
<list>
<value>小王</value>
<value>小马</value>
<value>小宋</value>
</list>
</property>	
<!-- list -->
<property name="list"> 
<list>
<value>小奥</value>
<value>小金</value>
<value>小普</value>
</list>			
</property>		
<!-- map -->
<property name="map">
<map>
<entry key="aa" value="lucy"></entry>
<entry key="bb" value="mary"></entry>
<entry key="cc" value="tom"></entry> 
</map>
</property>		
<!-- properties -->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.Driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>



   2、构造方法注入(掌握)

<bean id="user" class="com.yb.User">
<!-- 简单类型注入 -->
<constructor-arg name="name" value="youngboy"></constructor-arg>
<!-- 对象注入 -->
<constructor-arg name="man" ref="person"></constructor-arg>
<!-- 复杂类型注入 -->
<constructor-arg name="arrs">
<list>
<value>小王</value>
<value>小马</value>
<value>小宋</value>
</list>
<!-- list map properties 同上set注入 -->
</constructor-arg>
</bean>



 

   3、p名称空间注入(了解)



 

   4、接口注入(了解)



 

属性注解注入(重点)

  两个注解方式:
@Autowired @Resource(name="xxx")

<!-- 扫描属性上面的注解(被下面的扫描方式取代) -->
<context:annotation-config></context:annotation-config>
<!-- 到包里面扫描:类、方法、属性上面的注释 -->
<!-- 若要扫描com.yb.entity、com.yb.dao ...里面的注解可写成com.yb-->
<context:component-scan base-package="com.yb"></context:component-scan>
@Autowired
private Integer userId;
@Resource(name="username")
private String username;



Spring的aop操作(详情



 AOP操作术语

Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Aspect(切面): 是切入点和通知(引介)的结合
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象(要增强的类)
Weaving(织入):是把增强应用到目标的过程.
	把advice 应用到 target的过程
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类



使用表达式配置切入点 

1 切入点:实际增强的方法

2 常用的表达式
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
(1)execution(* com.aop.Book.add(..))
(2)execution(* com.aop.Book.*(..))
(3)execution(* *.*(..))
(4) 匹配所有save开头的方法 execution(* save*(..))
<!-- 开启aop操作 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
@Aspect
public class LoginController {
	@Before(value = "execution(* com.aop.Test.*(..))")
	public void test() {
		
	}
}


spring的事务管理

 第一步:配置事务管理器

<!-- 事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
    p:dataSource-ref="dataSource" />
<tx:advice id="txAdvice">
    <tx:attributes>
        <!-- 对update,delete,insert开头的方法进行事务管理,只要遇到异常就回滚 -->
        <tx:method name="update*" propagation="REQUIED" rollback-for="java.lang.Throwable" />
        <tx:method name="delete*" propagation="REQUIED" rollback-for="java.lang.Throwable" />
        <tx:method name="insert*" propagation="REQUIED" rollback-for="java.lang.Throwable" />
        <!-- 对查询数据库进行只读,提高数据库性能 -->
        <tx:method name="select*" read-only="true" />
        <tx:method name="count*" read-only="true" />
        <!-- 对其他的方法进行默认处理 -->
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>
<!-- 事务 aop 配置 -->
<aop:config>
    <aop:pointcut expression="execution(* com.yb.service.*.*(..))" id="serviceMethods" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>



 第二步:配置事务注解

<tx:annotation-driven transaction-manager="transactionManager"/>


第三步:在要使用事务的方法所在类上面添加注解  

@Transactional
public class LoginService {}

spring-mvc配置

    web.xml

<context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>
  		
  		classpath:applicationContext-*.xml
  	</param-value>
  </context-param>
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <filter>
  	<filter-name>encodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  	<init-param>
  		<param-name>forceEncoding</param-name>
  		<param-value>true</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>encodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!--Restful支持  jsp的form表单直接使用method="POST"的方式提交,提交一个隐藏的input  <input type="hidden" name="_method" value="put" /> -->
  <filter>
   <filter-name>HttpMethodFilter</filter-name>
   <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>HttpMethodFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- Restful支持 方式2 -->
  	<filter>  
        <filter-name>httpPutFormcontentFilter</filter-name>  
        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>httpPutFormContentFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>classpath:springMVC-servlet.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

springMVC-servlet.xml

<!-- 扫描controller -->
<context:component-scan base-package="**.controller"/>
<!-- 静态资源映射 -->
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/WEB-INF/img/" mapping="/img/**"></mvc:resources>
<mvc:resources location="/WEB-INF/font/" mapping="/font/**"></mvc:resources>

<!-- 自动配置适配器和映射器 -->
<mvc:annotation-driven ></mvc:annotation-driven>
<!-- jsp视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
	p:prefix="/WEB-INF/jsp/" 
	p:suffix=".jsp" />
</beans>