【Java】Spring框架笔记I

-1.常用约束



 

目录


0.Spring核心

1)aop:面向切面编程,扩展功能不是修改源代码来实现

     Aspect Oriented Programming

2)ioc:控制反转,将对象由new方式创建变成交给spring配置(注解)来创建

     Inversion of Control

1.aop 概述 原理 操作

1.1概念、术语

1.2底层原理

1.3具体使用(aspectj实现)

2.Spring整合web项目

2.1什么叫整合

2.2实现原理

3. IOC用配置文件方式来创建对象

4. IOC用注解方式产生对象

4.1配置

4.2创建对象

4.3注入属性(注解)

4.4混合配置文件和注释

5.Spring事务管理

5.1配置文件实现

5.2注解方式实现

 

 

0.Spring核心


1)aop:面向切面编程,扩展功能不是修改源代码来实现

     Aspect Oriented Programming

2)ioc:控制反转,将对象由new方式创建变成交给spring配置(注解)来创建

     Inversion of Control

 

ioc底层原理(使用技术)

(1)xml配置文件(dom4j解析)

(2)工厂设计模式

(3)反射

【Java】Spring框架笔记I_第1张图片


1.aop 概述 原理 操作


1.1概念、术语

AOP:面向切面编程,扩展功能不修改源代码来实现

采取横向的抽取机制,取代了传统纵向继承体系重复性代码

 

>>>Joinpoint(连接点):

类里面可以被增强的方法,这些方法称为连接点

 

>>>Pointcut(切入点):

所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.

实际被增强的方法就叫切入点

 

>>>Advice(通知/增强):

所谓通知是指拦截到Joinpoint之后所要做的事情就是通知(切面要完成的功能).

通知分为

>前置通知(在方法之前执行) @Before

>后置通知(在方法之后执行) @AfterReturning

>异常通知(方法出现异常)     @AfterThrowing

>最终通知(在后置之后执行)  @After

>环绕通知(在方法之前和之后执行) @Around

增强的功能就是通知/增强

 

>>>Aspect(切面):

是切入点和通知(引介)的结合

把增强应用到具体方法上面的过程称作切面

 

>>>Introduction(引介):

引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

 

>>>Target(目标对象):

代理的目标对象(要增强的类)

 

>>>Weaving(织入):

是把增强应用到目标的过程. 把advice 应用到 target的过程

 

>>Proxy(代理):

一个类被AOP织入增强后,就产生一个结果代理类

 

1.2底层原理

1)第一种情况,有接口情况,使用动态代理创建接口实现类(创建同级的接口实现类)代理对象

2)第二种情况,没有接口情况,使用动态代理创建类的子类(重写父类方法)代理对象

 

1.3具体使用(aspectj实现)

 

1.3.1 AOPXML配置实现

【Java】Spring框架笔记I_第2张图片


        
    
    

        
    
        
    

属性expression的常用表达式:

execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)       访问修饰符是 public private ...

1)execution(* cn.itcast.aop.Book.add(..))

2)execution(* cn.itcast.aop.Book.*(..))

3)execution(* *.*(..))

4) 匹配所有save开头的方法 execution(* save*(..))

 

1.3.2 AOP注解实现

同IOC注释 先 开启扫描 AOP的注释




被增强的类(方法)

public class Book {
	public void book() {
		System.out.println("Book");
	}
}

增强的类 value里面的值 还是上面(expression)讲过的execution的表达式

@Aspect
public class NewBook {

	@Before(value="execution(* com.demo.Book.book())")
	public void fun() {
		System.out.println("NewBook!");
	}
}

 

 

2.Spring整合web项目


2.1什么叫整合

加载Spring核心配置文件

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

将加载配置文件和创建对象的过程,放到服务器启动的时候来完成

 

2.2实现原理

1)ServletContext对象

2)监听器

3)具体使用:

- 在服务器启动时候,为每个项目创建一个ServletContext对象

- 在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建

- 使用监听器监听到ServletContext对象创建时候,

-- 加载spring配置文件,把配置文件配置对象创建

-- 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)

- 获取对象时候,到ServletContext域得到 (getAttribute方法)

 

3. IOC用配置文件方式来创建对象


 

java中的高内聚、低耦合:一个类中要紧密相连 、不同类的关联不能过于紧密

 

3.1spring的bean实例化的三种方式

>>>无参构造器(重点)

>>>静态工厂

public class BeanFactory {
	//静态的方法来返回User对象
	public static User getUser() {
		return new User();
	}
}

>>>实例工厂

public class BeanFactory {
	
	public User getUser() {
		return new User();
	}
}




 

3.2Bean标签常用属性

>>>id:起名称,任意名称

>>>class:所要创建的对象的类的全路径

>>>name:功能和id属性一样,但name可以包含特殊符号(用在struts1)

>>>scope:-singleton:默认值,单例,多次创建还是同一个对象

        -prototype::多例

        -request:创建对象把对象放到request域里面

        -session:创建对象把对象放到session域里面

        -globalSession:创建对象把对象放到globalSession里面

 

 

3.3属性注入的三种方式DI:依赖注入->向对象里面的属性设置值)

1)set(类也可以->ref)


    

对象注入:



    

2)有参数构造器


    

3)接口注入(Spring不支持)

 

3.4 P名称空间注入

xmlns:p="http://www.springframework.org/schema/p"

name是User类的属性

3.5复杂类型注入

>>>数组

>>>list集合

>>>map集合

>>>properties类型


		
			
				11
				22
				33
			
		
		
		
		
			
				22
				33
				44
						
		
		
		
		
			
				
				
				
			
		
		
		
		
			
				com.mysql.jdbc.Driver
				root
			
		
	

4. IOC用注解方式产生对象


4.1配置

 
        

4.2创建对象

@Component("userDao")
public class UserDao {
	public void fun() {
		System.out.println("dao");
	}
}
@Service("userService")
public class UserService {

	private UserDao userDao;	

    public void fun() {
		System.out.println("service()!");
		userDao.add();
	}
}

@Component("userDao")   ====   

 

Spring中提供@Component的三个衍生注解

>>>@Controller:WEB层

>>>@Service:业务层

>>>@Repository:持久层 

 

4.3注入属性(注解)

两种注入属性的方法:@Autowired / @Resource(name="")

属性注入 就不用set方法了 因为都是给属性赋值的操作

//在Service中注入Dao属性

@Autowired	//根据类名(UserDao)来找对象的 
private UserDao userDao;	
	
@Resource(name="userDao")	//根据name里面的对象名(@Component("userDao"))来找对象
private UserDao userDao1;

 

4.4混合配置文件和注释

1)创建对象操作使用配置文件方式实现


2)注入属性的操作使用注解方式实现

@Resource(name="userDao")	
private UserDao userDao;	

 

5.Spring事务管理

 

不同dao层提供了不同的实现类 ,根据自己需求选择

【Java】Spring框架笔记I_第3张图片

5.1配置文件实现


        
        	
        

		
		
			
			
				
				
			
		
		
		
		
			
			
			
			
		

5.2注解方式实现


        
        	
        


		

在所要使用事务的类/方法上面加注解@Transactional

 

 

 

 

 

 

你可能感兴趣的:(JAVA)