当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean。

getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想要一个依赖bean的新实例,那么您可能将不得不采用另一种方法。

在本文中,我们将看到一个使用lookup-method属性的方法注入的示例。

依存关系

添加以下依赖项:

  1. spring-core
  2. spring-context
  3. spring-beans

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.javarticles.spring</groupId><artifactId>springLookupMethodExample</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency></dependencies><properties><spring.version>3.2.3.RELEASE</spring.version></properties></project>

方法注入方法

每次调用getter方法时如何获取新实例? 一种方法是将依赖bean定义为原型,然后实现getter方法以向我们返回一个调用applicationContext.getBean(beanId)的新实例。
这种方法的问题在于,现在您依赖applicationContext

第二种方法是让容器管理方法注入。 getter方法可以是抽象的,让spring动态子类化包含getter方法的类,并实现它以返回配置的bean。 这样,我们可以使用相同的基类,并以不同的方式部署它,从而无需更改代码即可返回不同的bean。

使用查找方法的方法注入

所讨论的方法不必是getter方法,而应该是返回某些内容的方法。 在我们的示例中, PizzaShop是一个抽象类,它具有两个方法makePizzamakeVeggiesPizza() ,这makeVeggiesPizza()我们返回素食Pizza

披萨店:

package com.javarticles.spring;public abstract class PizzaShop {public abstract Pizza makePizza();public abstract Pizza makeVeggiePizza();
}

如您所见,我们的示例非常简单。 Pizza有一个静态count变量,当我们创建一个新实例时,该变量会增加。 它具有一个布尔成员isVeg ,如果比萨饼是素食主义者,则为true。

比萨:

package com.javarticles.spring;import java.util.concurrent.atomic.AtomicLong;public class Pizza {private static AtomicLong count = new AtomicLong(0); private boolean isVeg;public Pizza() {count.incrementAndGet();}public String toString() {return "A new " + (isVeg ? "veggie" : "") + "Pizza, count(" + count.get() + ")";}public void setIsVeg(boolean veg) {isVeg = veg;}
}

我们将makePizzamakeVeggiePizza配置为lookup-method 。 我们配置了一个普通的比萨饼和一个素食比萨饼豆。 每个抽象方法将具有一个<lookup-method元素。 name属性将是方法名称,并且bean将指向配置的bean。 在这里,我们已经将pizzaveggiePizza配置为原型豆。

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="pizzaShop" class="com.javarticles.spring.PizzaShop"><lookup-method name="makePizza" bean="pizza"/><lookup-method name="makeVeggiePizza" bean="veggiePizza"/></bean><bean id="pizza" class="com.javarticles.spring.Pizza" scope="prototype"/><bean id="veggiePizza" class="com.javarticles.spring.Pizza" scope="prototype"><property name="isVeg" value="true"/></bean></beans>

让我们下雪测试。 我们将首先加载上下文并获取PizzaShop bean。 接下来,我们将调用pizzaShop.makePizza()pizzaShop.makeVeggiePizza()

SpringLookupMethodExample:

package com.javarticles.spring;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringLookupMethodExample {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");try {PizzaShop pizzaShop = (PizzaShop) context.getBean("pizzaShop");Pizza firstPizza = pizzaShop.makePizza();System.out.println("First Pizza: " + firstPizza);Pizza secondPizza = pizzaShop.makePizza();System.out.println("Second Pizza: " + secondPizza);Pizza veggiePizza = pizzaShop.makeVeggiePizza();System.out.println("Veggie Pizza: " + veggiePizza);} finally {context.close();}}
}

每次调用该方法时,它都会创建一个新的Pizza bean,我们可以看到计数在增加。

输出:

First Pizza: A new Pizza, count(1)
Second Pizza: A new Pizza, count(2)
Veggie Pizza: A new veggiePizza, count(3)

下载源代码

这是有关使用lookup-method属性的弹簧方法注入的示例。 您可以在此处下载源代码: springLookupMethodExample.zip

翻译自: https://www.javacodegeeks.com/2015/05/spring-lookup-method-example.html

Spring查找方法示例相关推荐

  1. Spring查找方法注入(Lookup method injection)的底层实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 美女邀我去歌舞厅娱乐,我拒绝了,我觉得跟技术宅男们分享技术更为重要. Spring方法注入的概念:一个由容器管理的single ...

  2. spring aop示例_Spring查找方法示例

    spring aop示例 当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想 ...

  3. java方法示例注释 @_Java注释和真实世界的Spring示例

    java方法示例注释 @ "注释"是编程语言定义的一种,并用作"标记". 可以将它们视为编程语言引擎可以理解的注释行. 它们不会直接影响程序的执行,但会直接影响 ...

  4. java方法设置切点_java相关:Spring AOP中定义切点的实现方法示例

    java相关:Spring AOP中定义切点的实现方法示例 发布于 2020-6-6| 复制链接 摘记: 本文实例讲述了Spring AOP中定义切点的实现方法.分享给大家供大家参考,具体如下:一 配 ...

  5. Spring Data MongoDB示例

    Spring Data MongoDB示例 欢迎使用Spring Data MongoDB示例.Spring Data MongoDB是将Spring Framework与最广泛使用的NoSQL数据库 ...

  6. Spring Boot中使用Spring Data JPA示例

    JPA是Java Persistence API的简称,是sun公司早期推出的Java持久层规范,目前实现JPA规范的主流框架有Hibernate.OpenJPA等.Hibernate框架是当前较为流 ...

  7. php 判断是否微信访问,PHP判断是否微信访问的方法示例

    PHP判断是否微信访问的方法示例 本文实例讲述了PHP判断是否微信访问的方法.分享给大家供大家参考,具体如下: 在开发中有时需要禁止或者仅允许微信浏览器进行访问,则此时就需要对微信浏览器访问进行判断, ...

  8. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  9. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr string) ...

最新文章

  1. (三)硕博生常用的英文文献下载的网站
  2. 超级数学计算机,超级计算器+
  3. 第二阶段团队项目冲刺第六天
  4. 录音转成文字 android,安卓手机自带的录音转文字功能这么强大,堪称会议神器!你会用吗...
  5. 攻击技术还原:维基解密是如何遭到黑客攻击的?
  6. FIS.js前端开发的使用说明文档
  7. c++ socket学习(1.4)
  8. 前端学习(2249)注册 创建 拉取
  9. Scrapy 爬虫去重效率优化之 Bloom Filter的算法的对接
  10. 好系统教你如何在Windows中更改文件夹的图标
  11. MySQL常用函数系列之九:日期和时间函数 函数(4)
  12. 无码系列-2-代码架构空想
  13. MATLAB2016打开mat格式图片
  14. 44 年前的今天,改变世界的 TA 诞生了!
  15. 中国多端柔性直流输电行业发展分析及投资可行性调研报告2022-2028年版
  16. 先进激光三维成像雷达技术的研究进展与趋势分析
  17. 数据结构与算法之图的深度优先遍历(DFS)
  18. HDU 3533 BFS
  19. 计算机上安装的网络协议,win10系统正确安装网络协议的方法
  20. 2022年裁员潮,失业程序员何去何从?

热门文章

  1. 某同学正为自己安装不上sqlserver数据库而愁眉苦脸,使用朋友给的方法顿时喜笑颜开,那么朋友到底出了个什么样的方法呢?...
  2. javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
  3. MyBatis中的注解
  4. React生命周期(新)
  5. Android 对话框,确定取消
  6. 3-7 基于SpringBoot的Apache Shiro环境快速搭建与配置实操
  7. data layui table 排序_浅谈layui中table的sort排序
  8. Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案
  9. java技术专家学习路线图_向Java最佳专家的全球专家学习Java
  10. jpa执行sql脚本_JPA persistence.xml SQL脚本定义