spring基础知识详解

spring注入方式:

XML配置注入:

xml注入分为:构造方法注入:

和setter方法注入

配置如下:



	
	
		

		


	

使用p命名空间注入(详情可参考spring spel表达式):

简化setter方法注入
setter方法注入

  
  
P命令空间

普通值#   p:属性名="值"
引用值#   P:属性名-ref="引用名称"
前提:必须添加p命名空间


SpEL spring 表达式语言

l 使用 SpEL对所有操作进行简化,所有注入都采用value属性。

l 格式:表达式}">

l 表达式语言:

常量:#{123}#{23.4}#{'黑马'}

引用bean#{bean名称}

bean属性:#{beanId.propertyName}

bean方法:#{beanId.methodName()}

静态资源:#{T(类名).方法|字段}

大家具体参考这篇文章:http://wenku.baidu.com/view/59ff848571fe910ef12df89a.html?from=search

spring的集合映射:




	
		
		

	
	

	    
	       
	         gao  
	          gao1  
	           gao2  
	        

	    
	    
	
	
	    
	        
	        leige1
	        磊哥2
	        磊哥3
	    
	
	
	
	    
	      
	        
	        
	            1
	            
	             
	            leige1
	        
	                
	            2
	            leige2
	        
	    
	
	

	
写的不是很详细:大家具体可以参照这篇文章:http://my.oschina.net/itblog/blog/204383


注解注入:


l 注解:使用注解类用于取代xml配置文件。

优点:xml配置少,使用注解配置信息简化

缺点:硬编码,查询时繁琐。

l spring定义注解

1 @Component 组件,用于取代

提供Component 衍生版,功能相同,但用于标识不同的层次

@Repository 修饰dao

@Service 修饰service

@Controller 修饰web

方案1

@AutoWired 自动注入,默认按照类型

可以修饰在字段上

也可以修饰在setter方法上

缺点:如果同一个接口,有两个实现类,就会存在冲突

@Qualifier 修改AutoWired匹配,将按照名称匹配。

方案2

@Resource 可以完成 @AutoWired 和 @Qualifier 功能

例如:@Resource("userDaoId") 按照名称匹配

 

 @PostConstruct 初始化

 @PreDestroy 销毁

 

 @Scope 作用域

 

l使用注解,必须将“被注解修饰的类”交予spring进行扫描。

类所在包名">

 


调用注解首先是要在xml里面启用注解,

如下:

    			
  

还需要导入spring的aop包(我就是错误在这里,我已开始以为是spring3.x和jdk不兼容的问题,换了4.2的jar包还是一样,最后发现,错误在这,对于初学者来说真是呵呵):

spring基础知识详解_第1张图片


最后就可以启用注解了:

action层:
package com.leige.an;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
//@controller用于标示web层,不配名称,默认类的简称首字母小写
public class UserAction {
	@Autowired
	UserService userService;
	public void regist(){
		System.out.println("action------regist");
		userService.add();
	}
}

service层:


package com.leige.an;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;



/**
 * @author
 * 
 *@Service用于标识service层,不配名称,默认类的简称首字母小写
 */
@Service
public class UserServiceImpl implements UserService {
	@Autowired
	@Qualifier("userDaoId")
	//也可以标注在set方法上
	UserDao dao;
	


	@Override
	public void add() {
		// TODO Auto-generated method stub
		System.out.println("service------add");
		dao.save();
	}

}


dao层:


package com.leige.an;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;


/**
 * @author 
 * @Repository用于表示dao层,不配名称,默认类的简称首字母小写
 *
 */
@Repository("userDaoId")
public class UserDaoImpl implements UserDao {
	public void save(){
		System.out.println("dao----save");
	}
}


测试类:
package com.leige.an;



import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAP {

	@Test
	public void test() {
	String xmlPath="com/leige/an/beans.xml";
	ApplicationContext context=new ClassPathXmlApplicationContext(xmlPath);
	UserAction userAction=(UserAction) context.getBean("userAction");
	userAction.regist();
	}

}

结果:




你可能感兴趣的:(spring)