11:AOP 介绍:
面向切面;可以拦击方法,比如:如果用户没有权限就不让用户执行
业务中的某些方法;
12:spring提供了两种切面的使用方法:
(1)基于XML配置方法进行AOP开发
(2)基于注解方式进行AOP开发
13:spring+JDBC组合开发
(1)配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.git.mm.mysql.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/mydataBase"/>
<property name="username" value="lid"/>
<property name="password" value="123"/>
<!-- 连接池启动时的初始值-->
<property name="initialSize" value="1"/>
<!-- 连接池的最大值-->
<property name="maxActive" value="500"/>
<!-- 最大空闲值-->
<property name="maxIdle" value="2"/>
<!-- 最小空闲值-->
<property name="minIdle" value="1"/>
</bean>
(2)配置事物:基于注解方式和基于XML配置方式
基于注解:
spring配置文件中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.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">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.git.mm.mysql.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/mydataBase"/>
<property name="username" value="lid"/>
<property name="password" value="123"/>
<!-- 连接池启动时的初始值-->
<property name="initialSize" value="1"/>
<!-- 连接池的最大值-->
<property name="maxActive" value="500"/>
<!-- 最大空闲值-->
<property name="maxIdle" value="2"/>
<!-- 最小空闲值-->
<property name="minIdle" value="1"/>
</bean>
<!--事物管理器-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--采用@Transactional 注解方式使用事物-->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- 使用的是jdbcTemple,可换成其它的工具 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
</beans>
类:
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class PersonDao {
@Resource
private JdbcTemplate jdbcTemplate;
}
可以将数据源的链接信息等放到一个属性文件中,spring通过占位符的方式从属性文件中取得值:
创建一个属性文件:dataSourceConfig.properties(在里面配置如下内容)
driverClassName=org.git.mm.mysql.Driver
url=jdbc:mysql://localhost:3306/mydataBase
username=lid
password=123
initialSize=1
maxActive=500
maxIdle=2
minIdle=1
spring配置文件中这样:
<!-- 加载配置文件-->
<context:property-placeholder location="classpath*:dataSourceConfig.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="#{driverClassName}"/>
<property name="url" value="#{url}"/>
<property name="username" value="#{username}"/>
<property name="password" value="#{password}"/>
<!-- 连接池启动时的初始值-->
<property name="initialSize" value="#{initialSize}"/>
<!-- 连接池的最大值-->
<property name="maxActive" value="#{maxActive}"/>
<!-- 最大空闲值-->
<property name="maxIdle" value="#{maxIdle}"/>
<!-- 最小空闲值-->
<property name="minIdle" value="#{minIdle}"/>
</bean>
基于XML方式配置事物:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<aop:advisor pointcut="execution(* service..*.*(..))" advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="load*" read-only="true" />
<tx:method name="select*" read-only="true" />
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
14:spring 与hibernate的整合:
就是在spring.xml 文件中配置一下
<!--配置sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>org/springframework/samples/petclinic/hibernate/petclinic.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
</value>
</property>
</bean>
<!--配置事物管理(针对hibernate的事物管理器)-->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--采用@Transactional 注解方式使用事物-->
<tx:annotation-driven transaction-manager="txManager"/>
类:
@Transactional
public class PersonDao {
@Resource
private SessionFactory sessionFactory;
public void save(Person person){
sessionFactory.getCurrentSession().persist(person);
}
}
15:小插曲:web系统怎么加载spring的配置文件:
(1)如果配置文件为WEB-INF/ 下的applicationContext.xml
那我们只需在web.xml中添加如下:
<!--实例化spring,此时会默认的去WEB-INF中找applicationContext.xml-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(2)如果不在WEB-INF下或名字也不是applicationContext.xml,而是自己命名的,
在src/config下的spring.xml,那么我们可以在web.xml中这样配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:config/spring.xml
</param-value>
</context-param>
16:编码过滤器:
在web.xml中配置如下:
<!-- 编码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
17: spring+struts2:
spring容器的实例化和struts2的启用----就是在web.xml中进行如下的配置:
<!-- 对Spring容器进行实例化 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 启动struts2框架 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后在类路径下配置一个名为struts.xml的文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 更换掉struts2内部的对象创建工厂,action用spring创建 -->
<constant name="struts.objectFactory" value="spring"/>
<!-- 将struts的主题改成默认主题,防止其生成不必要的html代码 -->
<constant name="struts.ui.theme" value="simple"/>
<package name="employee" namespace="/employee" extends="struts-default">
<!-- 因为action有spring创建,所以只需指定spring创建的action的对象的名称就行 -->
<action name="list" class="employeeAction">
<result name="list">/WEB-INF/page/employee.jsp</result>
</action>
<action name="manage_*" class="employeeManageAction" method="{1}">
<result name="add">/WEB-INF/page/employeeAdd.jsp</result>
<result name="message">/WEB-INF/page/message.jsp</result>
</action>
</package>
</struts>
ps:action交给spring管理后,<action>标签中的class就不用写
全路径了(当然前提是用spring的注解标注action,这样spring才可以实例化action)
spring学习笔记(下)
最新推荐文章于 2022-11-25 16:02:36 发布