spring aop示例

当一个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都配置为原型bean。

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 aop示例

spring aop示例_Spring查找方法示例相关推荐

  1. spring aop示例_Spring Profile模式示例

    spring aop示例 最近,我们介绍了Spring Profiles的概念. 此概念是针对不同部署环境的轻松配置区分符. 直接的用例(已提出)是对相关的类进行注释,以便Spring根据活动的配置文 ...

  2. Spring查找方法示例

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

  3. Spring AOP无法拦截内部方法调用-- expose-proxy=true用法

    假设一个接口里面有两个方法: package demo.long;public interface CustomerService { public void doSomething1(); publ ...

  4. spring aop获取目标对象的方法对象(包括方法上的注解)(转)

    这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...

  5. spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...

    写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...

  6. spring boot示例_Spring Boot REST示例

    spring boot示例 Spring Boot is an awesome module from Spring Framework. Once you are used to it, then ...

  7. spring boot示例_Spring Boot完成示例

    spring boot示例 这篇文章提供了一个使用Spring Boot开发松耦合的REST服务的完整示例. 使用spring boot,我们可以开发可独立运行的生产就绪的Java应用程序,使其成为独 ...

  8. java spring scope_如何在Spring中自定义scope的方法示例

    大家对于 Spring 的 scope 应该都不会默认.所谓 scope,字面理解就是"作用域"."范围",如果一个 bean 的 scope 配置为 sing ...

  9. spring aop设计模式_Spring框架中设计模式的运用

    设计模式大家可能随口就能说出总共有23种,但是具体怎么用,或者在常用的组建中有哪些体现,这时候不一定说的上来了.接下来几篇文章,我们一起深入理解.首先我们一起了解下常用的组建中是怎么运用的,比如 JD ...

最新文章

  1. 【记录】ASP.NET IIS ISAPI_Rewrite
  2. RHCE笔记1-安裝
  3. 生活感悟 2018-06-13
  4. 关于mysql触发器和存储过程的理解
  5. php member limit,php 安全有关问题
  6. Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)
  7. Java中常用的集合
  8. 在群晖synoboot.img引导文件中加入网卡驱动_群晖DS1819+使用记录
  9. 16.定位模板,布局和样式
  10. java html加密_能提供加密与解密
  11. 华为S2000-HI交换机与cisco的acs结合做认证
  12. 劝你别把开源的数据分析项目写在简历上了!!!
  13. 【附源码】计算机毕业设计java学科竞赛赛场安排系统设计与实现
  14. c语言实现学生档案管理系统
  15. 深度学习之前馈神经网络(前向传播和误差反向传播)
  16. 数据结构笔记_34 赫夫曼编码压缩、解压文件
  17. 数字图像位移传感器在大坝安全监测运用
  18. 中山大学自考网校招生简章
  19. python解压 tar.gz文件
  20. Markdownpad2错误This view has crashed问题解决记录

热门文章

  1. P4317-花神的数论题【组合数学】
  2. ATcoder-Replace Digits【线段树】
  3. CF1066F-Yet another 2D Walking【贪心】
  4. jzoj6451-[2020.01.19NOIP提高组]不幸运数字【记忆化搜索,数位dp,高精度】
  5. Codeforces Round #654 (Div. 2)
  6. 【DP】饥饿的WZK(jzoj 1998)
  7. 初一模拟赛总结(2019.4.13)
  8. [USACO]Sprinklers 2: Return of the Alfalfa P(网格DP)
  9. 2017西安交大ACM小学期 毁灭序列[倒跑并查集]
  10. 一次恐怖的 Java 内存泄漏排查实战