`

spring注解注入和aop的具体应用

阅读更多

 

 

1 Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。

  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字

(如果两个属性都没有指定,则默认把类名称第一个字母小写作为bean的id),

而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

  @Resource装配顺序

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常

  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

 

 

2 web开发中用spring的上下文得到spring管理的类,用这个对象取得spring管理的对象

 

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
 
public class SpringContext implements ApplicationContextAware {

    protected static ApplicationContext context;
    
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }

    public static ApplicationContext getContext() {
        return context;
    }
    
    public static void main(String[] args) {
    	context.getBean( "userMng" );
	}
}

 

 

 

 

3  问题,在程序中整个模块既被第一个库用,又被第二个库用,这时候想使dao层公用

   1 做一个切换按钮 ,更改session中保存的标志位

   2 不同库,用不同的dao,实现同一个接口,在manager层做一个切面,然后用session中的标志位来控制具体用哪个dao

 

 

连接user模块中相应的Manager,然后执行切面方法

 

package com.wzt;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import com.wzt.SpringContext;
import com.wzt.StrutsUtil;
import com.wzt.UserImplDAO;
import com.wzt.UserMng;
 
 
public class UserAdvice implements MethodInterceptor {
 
    /** 
     * 拦截要执行的目标方法 
     */  
    public Object invoke(MethodInvocation invocation) throws Throwable {  
    	
		 
		String method = invocation.getMethod().getName() ;
		//根据不同的标志位siteId来控制切点用的是那个dao
		if(!"getUserDAO".equals( method ) && !"setUserDAO".equals( method ) ){
			//siteId放到
			Object siteId = StrutsUtil.getSession().get("siteId");
 
			UserMng userMng = (UserMng) SpringContext.getContext().getBean("userMng");
			if(siteId!=null && "5".equals(siteId )){ 
				userMng.setUserDAO( (UserImplDAO)SpringContext.getContext().getBean("userDAO") );
			}
			if( siteId!=null && "6".equals(siteId )){
				userMng.setUserDAO( (UserImplDAO)SpringContext.getContext().getBean("userMed66DAO") );
			}
		} 

    	Object result = invocation.proceed();  
        return result;  
    }  

}

 

 

 

 

 

分享到:
评论

相关推荐

    以注解方式模拟Spring IoC AOP

    依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合度降低。在Spring中,通常通过以下三种注解实现IoC: - `@Autowired`:自动装配,Spring会根据类型或名称找到...

    spring注解aop demo

    Spring注解AOP(Aspect-Oriented ...以上就是关于Spring注解AOP的基本知识点,包括其核心概念、使用方法、示例以及实际应用场景。理解并熟练掌握这些内容,将有助于提升在开发过程中对系统行为的控制和维护能力。

    如何实现Spring依赖注入 AOP.rar

    Spring框架是Java开发中广泛应用的一个轻量级容器,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)。这两个特性极大地简化了Java应用程序的开发和...

    spring-boot aop

    1. **引入依赖**:在`pom.xml`或`build.gradle`文件中添加Spring AOP和AspectJ的依赖。对于Maven,添加以下依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-aop ``` 2. ...

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    以注解方式模拟Spring_IoC,AOP

    在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它主要提供了依赖注入(IoC)和面向切面编程(AOP)两大核心功能。本文将通过注解方式来模拟Spring的IoC和AOP,帮助你深入理解这两个概念的实现原理。 **...

    Spring IOC和Spring AOP_spring aop_springIOC

    Spring框架是Java开发中最常用的轻量级框架之一,它的核心特性包括依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。这两个概念是Spring框架的基石,极大地简化了...

    Spring 注解 方式配制的小demo

    Spring框架是Java开发中的一个核心工具,它通过提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能,极大地简化了企业级应用的开发工作。注解配置是Spring 2.5引入...

    Spring的Aop和Ioc示例

    这可以通过Spring的`@Transactional`注解实现,而注解的解析和处理则依赖于Spring的AOP机制。 在提供的"springAopIoc"示例中,可能包含了以下内容: 1. **配置文件**:XML配置文件描述了bean的定义、依赖关系以及...

    Spring3.1 IOC+AOP需要的jar包

    以上jar包是实现Spring 3.1中IOC和AOP功能所必需的,实践中,还需要根据具体的应用需求,添加其他如数据库连接池、ORM框架等相关的库。 总结来说,Spring 3.1的IOC和AOP特性大大简化了企业级应用的开发,通过合理的...

    spring-aop-jar

    在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...

    spring2-aop.pdf

    Spring 的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),这些特性有助于提高代码的可维护性和可扩展性。 #### 二、面向切面编程 (AOP) 原理与实践 ##### ...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。

    Spring中IOC/AOP的说明和例子

    在Spring框架中,IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是两个核心的...因此,理解并熟练应用Spring的IOC和AOP对于提升Java应用程序的质量和可维护性至关重要。

    spring 使用 AspectJ注解开发Spring AOP.docx

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许我们在不修改原始代码的情况下,通过插入额外的功能来扩展或增强应用程序的行为。在本案例中,我们将探讨如何使用AspectJ注解来开发Spring AOP。 首先...

    Spring AOP IOC源码笔记.pdf

    Spring框架是Java开发中不可...总结,Spring框架的IoC和AOP特性极大地简化了Java开发,通过依赖注入解耦了组件,通过面向切面编程解决了共性问题。理解并熟练掌握这些概念和机制,对于提升开发效率和代码质量至关重要。

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    Spring框架提供了强大的AOP支持,使得开发者可以通过注解轻松地定义和应用切面。 首先,我们需要了解Spring AOP中的几个核心概念: 1. 切面(Aspect):一个关注点的模块化,例如日志或事务管理。在Spring中,切面...

    spring aop依赖jar包

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为Java应用程序提供了声明式的企业级服务,如事务管理、性能监控等。在Spring AOP中,我们可以通过定义切面(Aspect...

    springIOC与AOP配置

    Spring框架是Java开发中不可或缺的一部分,它通过引入依赖注入(IOC)和面向切面编程(AOP)的概念,极大地简化了应用程序的构建和管理。在本文中,我们将深入探讨Spring的IOC容器和AOP的核心概念,以及如何进行相关...

Global site tag (gtag.js) - Google Analytics