Spring学习经验总结
来源:互联网 发布:考试通软件 编辑:程序博客网 时间:2024/06/05 07:17
Bean的作用范围.singleton 默认的形式,在Spring的IOC容器中默认情况下只有一个对象的实例。.prototype 每次从容器中获取的bean都是新的对象。.request.response.global session1. Spring中Bean(默认的单例模式下)实例化的时间:容器实例化的时候。设置lay-init=“true”的时候会在getBean的时候才会实例化。2. 如果范围是prototype的时候,实在getBean的时候进行实例化的。Init-method 当bean被实例化之后会自动执行init-method中的方法。Destroy-method 当bean被销毁的时候自动执行里面的方法。基本的原理总结为:Xml配置文件中定义了很多属性,与之对应的创建一个含有这些类型的属性的类。通过读取XML中这些属性的值,填入到对应的那个类的属性当中去。在这个类中完成实例化bean对象,注入对象等操作依赖注入的两种方式:1.<bean id = “userDao” name = “userDao” class = “com.siti.entity.UserDaoImpl” /> <bean id = “userService” name = “userService” class = “com.siti.service.UserServiceImpl”><property name = “userDao” ref = “userDao”></property> </bean>2.使用内部bean的方式,但是这样的话这个bean就不能被其他的bean使用了<bean id = “userDao” name = “userDao” class = “com.siti.service.UserServiceImpl”><property name = “userDao”><bean class = “com.siti.entity.UserDaoImpl” /></property></bean>构造方法注入依赖对象和值pulic void UserService(UserDao userDao , String name){}<bean id = “userDao” name = “userDao” class = “com.siti.entity.UserDaoImpl” /><bean id = “userService” class = “com.siti.serviceimpl.UserServiceImpl”><constructor-arg index = “0” type = “com.siti.dao.UserDao” ref = “userDao”/><constructor-arg index = “1” type = “nihao”></constructor-arg></bean>@Autowired是spring框架的,但是@Resource集成到了Javaee里面了(不建议使用)配置文件中写<context:annotation-config/><bean id = “userDao” class = “com.siti.impl.UserDaoImpl”/><bean id = “userServiceImpl” class = “com.siti.service.impl.UserServiceImpl’ />同在UserServiceImpl中属性之前加上@Resource就可以啦可以加参数@Resource(name = “userDao”)@Autowired与@Resource使用一样的。Autowired(required = true) 默认是必须注入的@Autowired @Qualifier(“userDao”) 按名进行装配Spring自动扫描<context:component-scan base-package = “com.siti/>”在Dao的实现类中标注:@Repository在service类中@Service(中间可以指定其名称)标注会自动的将对象交给spring进行管理@Scope指定作用域范围指定初始化方法:@PostConstruct指定关闭资源的函数:@PreDestroyAOP代理对象基于注解的方式实现首先启动对@AspectJ注解的支持<aop:aspectj-autoproxy/>以及引入AOP的命名空间http://www............例如<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <aop:aspectj-autoproxy/> <bean id="myInterceptor" class="cn.siti.service.MyInterceptor"/> <bean id="personService" class="cn.siti.service.impl.PersonServiceBean"></bean></beans>@Pointcut(“execution (* cn.siti.service.. * . * (..))”)Execution表示执行,*表示返回值的类型(*是任何的类型),cn.siti.service表示在哪个包下面进行拦截,后面的两个点表示对于它的子包底下的类也要进行拦截,后面的*表示包下面的类*表示所有类,后面的*表示方法,后面的括号(. . )表示参数随意@Aspectpublic class MyInterceptor {@Pointcut("execution (* cn.itcast.service.impl.PersonServiceBean.*(..))")private void anyMethod() {} //声明切入点@Before("anyMethod() && args(name)")public void doAccessCheck(String name) {System.out.println("前置通知:"+ name);}@AfterReturning(pointcut="anyMethod()",returning="result")public void doAfterReturning(String result) {System.out.println("后置通知:"+ result);}@After("anyMethod()")---->最后一定会执行的public void doAfter() {System.out.println("最终通知!");}@AfterThrowing(pointcut="anyMethod()",throwing="e")public void doAfterThrowing(Exception e) {System.out.println("例外通知:"+ e);}@Around("anyMethod()")public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {//if(){//判断用户是不是有权限System.out.println("环绕通知");Object result = pjp.proceed();System.out.println("运行");//}return result;}使用配置文件配置的方式<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <aop:aspectj-autoproxy/> <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean> <bean id="aspetbean" class="cn.itcast.service.MyInterceptor"/> <aop:config> <aop:aspect id="asp" ref="aspetbean"> <aop:pointcut id="mycut" expression="execution(* cn.itcast.service..*.*(..))"/> <aop:before pointcut-ref="mycut" method="doAccessCheck"/> <aop:after-returning pointcut-ref="mycut" method="doAfterReturning"/><aop:after-throwing pointcut-ref="mycut" method="doAfterThrowing"/><aop:after pointcut-ref="mycut" method="doAfter"/><aop:around pointcut-ref="mycut" method="doBasicProfiling"/> </aop:aspect> </aop:config></beans>Spring+JDBC组合开发配置文件<?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:context="http://www.springframework.org/schema/context" 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:property-placeholder location="classpath:jdbc.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}"/> <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --><property name="maxIdle" value="${maxIdle}"/> <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --> <property name="minIdle" value="${minIdle}"/> </bean><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean><tx:annotation-driven transaction-manager="txManager"/><bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"><property name="dataSource" ref="dataSource"/> </bean></beans>jdbc.propertiesdriverClassName=org.gjt.mm.mysql.Driverurl=jdbc\:mysql\://localhost\:3306/itcast?useUnicode\=true&characterEncoding\=UTF-8username=rootpassword=123456initialSize=1maxActive=500maxIdle=2minIdle=1注解的方式配置事务Unchecked 运行期例外,事务会回滚的(默认的)Checked 这种事务不会回滚(默认的方式)对于checked这种事务要求回滚: @Transactional(rollbackFor = Exception.class)不需要使用事务的话@Transactional(propagation = Propagation.NOT_SUPPORTED)采用基于XML的方式配置事务建议使用注解的方式使用事务。整合开发Spring集成Hibernate二级缓存<?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:context="http://www.springframework.org/schema/context" 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:annotation-config/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> <!-- 连接池启动时的初始值 --> <property name="initialSize" value="1"/> <!-- 连接池的最大值 --> <property name="maxActive" value="500"/> <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --> <property name="maxIdle" value="2"/> <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --> <property name="minIdle" value="1"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> <value>cn/itcast/bean/Person.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=false hibernate.format_sql=false hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=false hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider </value> </property></bean><bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/></bean><tx:annotation-driven transaction-manager="txManager"/><bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"/><bean id="personList" class="cn.itcast.web.PersonAction"/></beans>Spring 集成JPA在src目录下创建META-INF文件夹,在下面创建persistentce.xml<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="itcast" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="123456"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8"/> <property name="hibernate.max_fetch_depth" value="3"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit></persistence>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:context="http://www.springframework.org/schema/context" 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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:annotation-config/><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> <property name="persistenceUnitName" value="itcast"/> </bean> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <tx:annotation-driven transaction-manager="txManager"/><bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"/><bean name="/person/list" class="cn.itcast.web.action.PersonAction"/><bean name="/person/manage" class="cn.itcast.web.action.PersonManageAction"/></beans>
0 0
- Spring学习经验总结
- Spring 学习经验总结
- 学习经验总结
- 学习经验总结
- 学习经验总结
- spring websocket 经验总结
- good,JSP学习经验总结
- 大一学习经验总结
- 个人学习经验总结
- JSP学习经验总结
- JSP 的学习经验总结
- java 学习经验总结
- Linux/Unix学习经验总结
- JSP学习经验总结-------转
- JSP 的学习经验总结
- msp430 学习经验总结
- centos6学习经验总结
- Qtouch学习经验总结
- VS 中捕获内存泄露
- HDOJ 4466 Triangle 递推
- 插入排序
- C++中vector用法
- Linux PCI中断:冲突和传递,两张相同PCI卡的冲突
- Spring学习经验总结
- 选择我自己的算法
- 蓝桥杯练习试题——十六进制转换成八进制
- cadf
- 【C++模版之旅】神奇的Traits
- C++封装Linux消息队列
- 关于书上说的“编译的时候分配内存”
- uva 11468 Substring (ac自动机+记忆化搜索)
- java线程