`
quaff
  • 浏览: 13235 次
  • 性别: Icon_minigender_1
  • 来自: 天朝
文章分类
社区版块
存档分类
最新评论

Spring容器外注入依赖

阅读更多
package test;

import org.springframework.beans.factory.annotation.Configurable;

@Configurable("testBean")
public class TestBean {
	private TestService testService;

	public TestService getTestService() {
		return testService;
	}
	public void setTestService(TestService testService) {
		this.testService = testService;
	}

}

package test;

public class TestService {
	public String sayHello() {
		return "Hello";
	}
}


<?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: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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<aop:spring-configured />
<bean id="testService" class="test.TestService"
depends-on="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect" />
<bean id="testBean" class="test.TestBean" scope="prototype">
<property name="testService" ref="testService" />
</bean>
</beans>

在META-INF里面加入aop.xml
<!DOCTYPE aspectj PUBLIC
"-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>
<aspects>
<include
within="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect" />
</aspects>
<weaver
<include within="test.TestBean" />
</weaver>
</aspectj>

用的是aspectj的加载期植入代码,jvm的启动参数加上-javaagent:aspectjweaver.jar

现在来测试

package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String... strings) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext-test.xml");
TestBean bean = new TestBean();
System.out.println(bean.getTestService());
}

}

分享到:
评论
5 楼 Norther 2006-11-20  
我用hibernate spring webwork 给DOMIAN MODEL注入总是发生莫名其妙的问题,很不稳定,例如这种错误
Caused by: org.springframework.beans.factory.BeanCreationException: Error creat
ng bean with name 'com.xxxx.domain.user.UserInfo$$EnhancerByCGLIB$$
3a79798': Error setting property values; nested exception is org.springframewor
.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException:
Property 'sessionFactory' threw exception; nested exception is org.hibernate.La
yInitializationException: unexpected case hit, method=createHibernateTemplate

请问楼主 你在生产环境中使用过该方法吗?可靠吗?
4 楼 partech 2006-11-15  
JRockit对AOP LTW做了优化,会快很多。
JVM 用-Xmanagement:class=org.aspectj.weaver.loadtime.JRockitAgent参数。
3 楼 Norther 2006-11-15  
谢谢你,我搞定了,还挺麻烦。。呵呵不过性能差距太大

我做了个测试

构造5万个对象 用ASPECTJ植入和不植入的性能差距300倍,

50万个对象差距1000倍,汗。。。。
2 楼 quaff 2006-11-14  
Norther 写道
楼主,你好。。我没有试成功,我在spring的reference上看到,并不用在JVM上加参数和创建AOP。XML,只是用了Configurable的Annotation,但是你的方法我也没试成功,应该被注入的对象引用是null,能不能再详细的解释下2.0 里的aspectj的容器外注射的原理,谢谢

这个是在ClassLoader级别植入的,不是靠动态代理,需要加jvm启动参数,你仔细看看reference
1 楼 Norther 2006-11-14  
楼主,你好。。我没有试成功,我在spring的reference上看到,并不用在JVM上加参数和创建AOP。XML,只是用了Configurable的Annotation,但是你的方法我也没试成功,应该被注入的对象引用是null,能不能再详细的解释下2.0 里的aspectj的容器外注射的原理,谢谢

相关推荐

    spring依赖注入

    其次,setter注入是通过在类中声明setter方法,Spring容器会调用这些方法来注入依赖。这种方式更灵活,允许在对象创建后改变依赖,但可能导致对象在不完整状态下被初始化。 为了实现这些注入,我们需要在Spring配置...

    Spring Ioc 注解 依赖注入

    - **依赖注入**:依赖注入是一种设计模式,通过依赖注入,一个类的对象不再负责创建其依赖的对象,而是由外部容器(Spring容器)来负责创建这些依赖并注入到需要它们的地方。 #### 三、Spring IoC容器的工作原理 ...

    spring IOC容器依赖注入XML配置

    这样,开发者无需在代码中手动创建和管理对象,而是由Spring容器负责,从而降低了耦合度。 XML配置是Spring早期的主要配置方式,虽然现在有注解配置和Java配置,但理解XML配置仍然是基础。一个基本的Spring配置文件...

    spring依赖注入三种方式 测试源码

    当创建一个类的新实例时,Spring容器会调用带有所需参数的构造函数,从而完成依赖注入。这种方式确保了对象在创建时就已经具备了所有必要的依赖。例如: ```java public class UserService { private UserDao ...

    Spring的依赖注入,与前置通知的实例

    1. **构造器注入**:通过在类的构造函数中传递依赖对象的实例,Spring容器会在创建目标对象时调用合适的构造函数并注入依赖。 2. **setter注入**:在类中定义setter方法,Spring容器可以通过调用这些setter方法来...

    spring依赖注入底层详解

    总的来说,Spring依赖注入的底层机制涉及了反射、AOP和容器管理等多个方面,它有效地解决了对象间的依赖关系问题,提升了代码的可读性和可维护性,是Spring框架的一大亮点。通过深入理解这一机制,开发者可以更好地...

    Spring 控制反转 依赖注入

    3. **接口注入**:较少使用,通过实现特定接口来注入依赖,但Spring并不直接支持,通常需要自定义实现。 **Spring的配置方式** Spring提供了多种配置方式: 1. **XML配置**:传统的Spring配置方式,通过`&lt;bean&gt;`...

    模拟Spring的依赖注入

    在模拟Spring的依赖注入时,我们可以创建一个类似于Spring容器的类,负责创建和管理对象以及它们的依赖关系。这个类可以包含一个注册方法,用于接收需要注入的对象及其依赖,然后在创建对象时进行注入。 **创建模拟...

    spring依赖注入例子

    Spring框架的依赖注入(Dependency Injection,简称DI)是其核心特性之一,它使得对象之间的关系在运行时由Spring容器管理,而不是硬编码在类内部。这样可以提高代码的可测试性和可维护性,因为对象的依赖关系变得松...

    Spring依赖注入检查.

    对于非POJO对象或者有特殊初始化需求的对象,Spring提供工厂方法来创建并注入依赖。 6. **@Qualifier注解**: 当有多个相同类型的bean,而我们需要指定具体哪一个时,`@Qualifier`注解可以用来明确指定。 7. **@...

    spring依赖注入的实现原理

    当Spring容器读取到XML配置或注解信息后,会通过反射调用无参构造函数创建Bean实例。 5. **依赖查找(Dependency Lookup)** 对于按需加载的依赖,Spring会在容器中查找匹配的Bean并注入。 6. **依赖注入...

    使用反射和注解模拟Spring的依赖注入

    在Java编程中,Spring框架是应用最广泛的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)容器。这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现...

    第三章 Spring4 依赖注入

    3. 易于管理:通过Spring容器,可以集中管理和控制所有对象及其依赖。 四、使用注解和XML配置 Spring4支持注解驱动的依赖注入,如`@Autowired`、`@Qualifier`等,同时也可以通过XML配置文件来定义依赖关系。注解...

    模仿Spring依赖注入

    通过在类的构造函数中添加参数,Spring容器会根据参数类型匹配并注入相应的bean。例如: ```java public class UserService { private UserDao userDao; public UserService(UserDao userDao) { this.userDao =...

    Spring 核心机制(依赖注入)

    依赖注入是Spring框架的核心机制之一,它通过将组件之间的依赖关系交给Spring容器来管理,有效降低了组件间的耦合度,提高了系统的灵活性和可维护性。通过设值注入的方式,可以更加简洁直观地实现依赖注入的目标。在...

    Spring_依赖注入_面向接口编程

    依赖注入(DI)是Spring框架的核心特性之一,它允许我们把对象的依赖关系从代码中解耦出来,转而由Spring容器来管理。在传统的编程模式中,对象通常自行创建和管理它们所依赖的对象,但在Spring中,这些依赖是由外部...

    java中spring依赖注入的简单例子

    也就是实例化一个类 不再由调用者来完成 通常由 Spring 容器来完成 然后注入调用者 因此称为控制反转 也称为依赖注入 "&gt;javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖...

    自己的代码模拟spring的依赖注入

    4. **实现依赖注入**:在模拟的IoC容器中,我们需要一个方法来注入依赖。这可以通过反射实现,找到组件类中带有特定注解(例如`@Autowired`)的字段,并使用IoC容器提供的对象进行填充。 ```java public class ...

    Spring简单模拟Spring容器

    标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...

    Spring依赖注入的方式

    Spring容器在创建对象时,会调用带有相应依赖的构造函数来初始化对象。这种方式确保了对象在创建时就已经拥有所有必要的依赖,提高了对象的完整性和一致性。 ```java public class UserService { private ...

Global site tag (gtag.js) - Google Analytics