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());
}
}
分享到:
相关推荐
其次,setter注入是通过在类中声明setter方法,Spring容器会调用这些方法来注入依赖。这种方式更灵活,允许在对象创建后改变依赖,但可能导致对象在不完整状态下被初始化。 为了实现这些注入,我们需要在Spring配置...
- **依赖注入**:依赖注入是一种设计模式,通过依赖注入,一个类的对象不再负责创建其依赖的对象,而是由外部容器(Spring容器)来负责创建这些依赖并注入到需要它们的地方。 #### 三、Spring IoC容器的工作原理 ...
这样,开发者无需在代码中手动创建和管理对象,而是由Spring容器负责,从而降低了耦合度。 XML配置是Spring早期的主要配置方式,虽然现在有注解配置和Java配置,但理解XML配置仍然是基础。一个基本的Spring配置文件...
当创建一个类的新实例时,Spring容器会调用带有所需参数的构造函数,从而完成依赖注入。这种方式确保了对象在创建时就已经具备了所有必要的依赖。例如: ```java public class UserService { private UserDao ...
1. **构造器注入**:通过在类的构造函数中传递依赖对象的实例,Spring容器会在创建目标对象时调用合适的构造函数并注入依赖。 2. **setter注入**:在类中定义setter方法,Spring容器可以通过调用这些setter方法来...
总的来说,Spring依赖注入的底层机制涉及了反射、AOP和容器管理等多个方面,它有效地解决了对象间的依赖关系问题,提升了代码的可读性和可维护性,是Spring框架的一大亮点。通过深入理解这一机制,开发者可以更好地...
3. **接口注入**:较少使用,通过实现特定接口来注入依赖,但Spring并不直接支持,通常需要自定义实现。 **Spring的配置方式** Spring提供了多种配置方式: 1. **XML配置**:传统的Spring配置方式,通过`<bean>`...
在模拟Spring的依赖注入时,我们可以创建一个类似于Spring容器的类,负责创建和管理对象以及它们的依赖关系。这个类可以包含一个注册方法,用于接收需要注入的对象及其依赖,然后在创建对象时进行注入。 **创建模拟...
Spring框架的依赖注入(Dependency Injection,简称DI)是其核心特性之一,它使得对象之间的关系在运行时由Spring容器管理,而不是硬编码在类内部。这样可以提高代码的可测试性和可维护性,因为对象的依赖关系变得松...
对于非POJO对象或者有特殊初始化需求的对象,Spring提供工厂方法来创建并注入依赖。 6. **@Qualifier注解**: 当有多个相同类型的bean,而我们需要指定具体哪一个时,`@Qualifier`注解可以用来明确指定。 7. **@...
当Spring容器读取到XML配置或注解信息后,会通过反射调用无参构造函数创建Bean实例。 5. **依赖查找(Dependency Lookup)** 对于按需加载的依赖,Spring会在容器中查找匹配的Bean并注入。 6. **依赖注入...
在Java编程中,Spring框架是应用最广泛的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)容器。这篇博客"使用反射和注解模拟Spring的依赖注入"探讨了如何通过基本的Java特性来实现...
3. 易于管理:通过Spring容器,可以集中管理和控制所有对象及其依赖。 四、使用注解和XML配置 Spring4支持注解驱动的依赖注入,如`@Autowired`、`@Qualifier`等,同时也可以通过XML配置文件来定义依赖关系。注解...
通过在类的构造函数中添加参数,Spring容器会根据参数类型匹配并注入相应的bean。例如: ```java public class UserService { private UserDao userDao; public UserService(UserDao userDao) { this.userDao =...
依赖注入是Spring框架的核心机制之一,它通过将组件之间的依赖关系交给Spring容器来管理,有效降低了组件间的耦合度,提高了系统的灵活性和可维护性。通过设值注入的方式,可以更加简洁直观地实现依赖注入的目标。在...
依赖注入(DI)是Spring框架的核心特性之一,它允许我们把对象的依赖关系从代码中解耦出来,转而由Spring容器来管理。在传统的编程模式中,对象通常自行创建和管理它们所依赖的对象,但在Spring中,这些依赖是由外部...
也就是实例化一个类 不再由调用者来完成 通常由 Spring 容器来完成 然后注入调用者 因此称为控制反转 也称为依赖注入 ">javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖...
4. **实现依赖注入**:在模拟的IoC容器中,我们需要一个方法来注入依赖。这可以通过反射实现,找到组件类中带有特定注解(例如`@Autowired`)的字段,并使用IoC容器提供的对象进行填充。 ```java public class ...
标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...
Spring容器在创建对象时,会调用带有相应依赖的构造函数来初始化对象。这种方式确保了对象在创建时就已经拥有所有必要的依赖,提高了对象的完整性和一致性。 ```java public class UserService { private ...