Spring学习经验总结


Bean的作用范围
.singleton 默认的形式,在Spring的IOC容器中默认情况下只有一个对象的实例。
.prototype 每次从容器中获取的bean都是新的对象。
.request
.response
.global session

1. Spring中Bean(默认的单例模式下)实例化的时间:容器实例化的时候。设置lay-init=“true”的时候会在getBean的时候才会实例化。
2. 如果范围是prototype的时候,实在getBean的时候进行实例化的。

Init-method 当bean被实例化之后会自动执行init-method中的方法。
Destroy-method 当bean被销毁的时候自动执行里面的方法。


基本的原理总结为:
Xml配置文件中定义了很多属性,与之对应的创建一个含有这些类型的属性的类。
通过读取XML中这些属性的值,填入到对应的那个类的属性当中去。
在这个类中完成实例化bean对象,注入对象等操作


依赖注入的两种方式:
1.
  

  

2.使用内部bean的方式,但是这样的话这个bean就不能被其他的bean使用了







构造方法注入依赖对象和值
pulic void UserService(UserDao userDao , String name)
{

}







@Autowired是spring框架的,但是@Resource集成到了Javaee里面了(不建议使用)

配置文件中写





同在UserServiceImpl中属性之前加上@Resource就可以啦

可以加参数@Resource(name = “userDao”)

@Autowired与@Resource使用一样的。
Autowired(required = true) 默认是必须注入的
@Autowired @Qualifier(“userDao”) 按名进行装配

Spring自动扫描
”
在Dao的实现类中标注:@Repository
在service类中@Service(中间可以指定其名称)标注会自动的将对象交给spring进行管理
@Scope指定作用域范围
指定初始化方法:@PostConstruct
指定关闭资源的函数:@PreDestroy

AOP代理对象

基于注解的方式实现
首先启动对@AspectJ注解的支持以及引入AOP的命名空间http://www............
例如


         
        
        


@Pointcut(“execution (*  cn.siti.service.. * . * (..))”)
Execution表示执行,*表示返回值的类型(*是任何的类型),cn.siti.service表示在哪个包下面进行拦截,后面的两个点表示对于它的子包底下的类也要进行拦截,后面的*表示包下面的类*表示所有类,后面的*表示方法,后面的括号(. . )表示参数随意


@Aspect
public 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;
	}


使用配置文件配置的方式



         
        
        
        
        
        	
        	
        	
	
	
	
        
        

Spring+JDBC组合开发
配置文件



	 
	 
	    
	    
	    
	    
	     
	
	 
	 
	 
	
	 
 
	 

	
  	  
    
	
	
		
       


jdbc.properties
driverClassName=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost\:3306/itcast?useUnicode\=true&characterEncoding\=UTF-8
username=root
password=123456
initialSize=1
maxActive=500
maxIdle=2
minIdle=1



注解的方式配置事务

Unchecked 运行期例外,事务会回滚的(默认的)
Checked 这种事务不会回滚(默认的方式)
对于checked这种事务要求回滚: @Transactional(rollbackFor = Exception.class)

不需要使用事务的话
@Transactional(propagation = Propagation.NOT_SUPPORTED)


采用基于XML的方式配置事务

建议使用注解的方式使用事务。




整合开发


Spring集成Hibernate二级缓存



	 
	 
	    
	    
	    
	    
	     
		 
		 
		 
		 
		 
		 
		 
	  
	  
	
	     
		 
		    
		      cn/itcast/bean/Person.hbm.xml
		    
		 
	     
		    
		        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
		      
	     
	
	
	  	
	
	
	
	




Spring 集成JPA



在src目录下创建META-INF文件夹,在下面创建persistentce.xml



  
      
         
         
         
         
         
         
         
      
  



Spring的配置文件


	 
	
      
    
    
  	  
   
 	
	
	
	


你可能感兴趣的:(Spring)