java的lookup方法_lookup方法注入

博客介绍了Java的lookup方法,一般用于获取非单例对象。在Spring中,若方法非抽象,会覆盖已有实现,可在XML配置文件中用lookup - method元素指定。还通过代码示例展示了获取对象的不同方式,getRandom()得到同一对象,createRandom()每次得到新对象。

一般用来得到一个非单例对象.

如果方法不是抽象的,spring回简单地覆盖已有的实现,在基于XML的配置文件中,通过在bean定义中使用lookup-method元素来告诉Spring所要足入/覆盖的方法将要返回的实际bean

Random.java

package com.test;

public class Random {

private int i = (int) (100 * Math.random());

public void printRandom() {

System.out.println("输出随机整数:  " + i);

}

}

------------------------------------------------

HelloRandom.java

package com.test;

public interface HelloRandom {

public Random getRandom();

public Random createRandom();

}

-------------------------------------------------

HelloRandomAbstract.java

package com.test;

public abstract class HelloRandomAbstract implements HelloRandom{

private Random random;

public Random getRandom() {

return random;

}

public void setRandom(Random random) {

this.random = random;

}

//此方法建议是抽象的

public abstract Random createRandom();

}

---------------------------

XML文件如下:

helloRandomAbstract对象有2中方式可以得到Random对象:通过getRandom() 方法,通过createRandom()方法;

两者有什么不同呢,前一中方法得到的同一个对象,也就是说只要getRandom(),得到的都是同一个方法;后一种方法调用一次createRandom(),每次调用得到的都是性的Random对象.这就象前面说的spring ioc容器重写bean抽象(或)具体方法的能力,从而返回指定名字的bean实例.一般用来得到一个非单例对象.

### Java 方法注入的类型及实现方式 方法注入是一种依赖注入的方式,主要用于解决某些场景下无法通过构造器或字段直接注入依赖的问题。以下是Java方法注入的主要类型及其实现方式: #### 1. Setter 方法注入 Setter 方法注入是最常见的依赖注入方式之一,它通过定义一个公共的Setter方法注入依赖项。Spring框架会自动调用该方法并将依赖项传递给目标对象[^3]。 以下是一个使用Setter方法注入的示例: ```java public class UserService { private UserRepository userRepository; // Setter方法用于注入依赖 public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } } ``` 需要注意的是,如果类中定义了带有参数的构造方法,则必须同时提供无参构造方法,否则Spring将无法实例化对象并抛出异常[^3]。 #### 2. 配置类中的方法注入 在Spring框架中,可以通过配置类中的`@Bean`注解定义方法,并利用方法返回值完成依赖注入。这种方式适用于复杂的依赖关系或需要动态创建Bean的场景。 以下是一个通过配置类进行方法注入的示例: ```java @Configuration public class AppConfig { @Bean public UserService userService() { UserService userService = new UserService(); userService.setUserRepository(userRepository()); // 手动注入依赖 return userService; } @Bean public UserRepository userRepository() { return new UserRepositoryImpl(); } } ``` #### 3. 使用`@Lookup`注解的方法注入 `@Lookup`注解允许开发者在运行时从Spring容器中查找并注入特定类型的Bean。这种方式通常用于解决原型作用域(Prototype Scope)Bean的注入问题。 以下是一个使用`@Lookup`注解的示例: ```java public abstract class TaskExecutor { // 使用@Lookup注解注入原型作用域的Bean @Lookup public abstract Task getTask(); public void executeTask() { Task task = getTask(); // 每次调用都会返回一个新的Task实例 task.run(); } } ``` #### 4. 使用`ApplicationContext`的方法注入 通过`ApplicationContext`接口,可以直接在方法中获取Spring容器中的Bean实例。这种方式适合在非Spring管理的类中进行依赖注入。 以下是一个使用`ApplicationContext`进行方法注入的示例: ```java public class NonSpringManagedClass { private ApplicationContext applicationContext; public NonSpringManagedClass(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } public void performAction() { MyService myService = applicationContext.getBean(MyService.class); // 获取Bean myService.execute(); } } ``` --- ### 总结 方法注入是依赖注入的一种形式,主要通过Setter方法、配置类中的方法、`@Lookup`注解以及`ApplicationContext`等方式实现。每种方式都有其适用场景,开发者应根据实际需求选择合适的注入方式。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值