spring aop示例_Spring查找方法示例

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java hive查询_java程序调用hive查询的一个异常

最近在java程序中调用hive做查询时&#xff0c;碰到一个异常&#xff0c;被困扰了许久&#xff0c;经过几番调试&#xff0c;逐步把问题定位清楚。在异常描述前先给出异常信息&#xff1a;java.sql.SQLException: Error while processing statement: FAILED: Execution Error, …

C/C++入门易错点及常用小技巧

点击上方蓝字关注我&#xff0c;了解更多咨询C语言诞生至今已有30多个年头了&#xff0c;主要集中在需要运行效率比较高的行业&#xff0c;比如现在的游戏开发以及高效服务器等等。C学习难度比其它语言都要高&#xff0c;这是不可否认的&#xff0c;其学习难度主要在于它的复杂…

quasar_Quasar和Akka –比较

quasaractor模型是用于容错和高度可扩展系统的设计模式。 角色是独立的工作程序模块&#xff0c;它们仅通过消息传递与其他角色进行通信&#xff0c;可以与其他角色隔离而失败&#xff0c;但是可以监视其他角色的故障并在发生这种情况时采取一些恢复措施。 角色是简单&#xff…

java 文件封装_Java 封装

在面向对象程式设计方法中&#xff0c;封装(英语&#xff1a;Encapsulation)是指&#xff0c;一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障&#xff0c;防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据&am…

什么是自定义函数?精简回答

点击上方蓝字关注我&#xff0c;了解更多咨询1、自定义函数是程序员根据所要完成的功能&#xff0c;自己写出的源代码实现该功能。2、自定义函数和库函数一样&#xff0c;具有函数名&#xff0c;返回值类型&#xff0c;和函数参数。示例1&#xff1a;写一个函数找出两整数的值。…

为什么awt_为AWT的机器人创建DSL

为什么awtJava SDK附带了java.awt.Robot类&#xff0c;该类允许键盘和鼠标输入的自动化以及屏幕捕获的创建。 当您要编写一个模拟用户输入的小型测试应用程序时&#xff0c;或者只想自动化一些重复文本的输入时&#xff0c;此功能非常有用。 但是您不想每次都编写一个完整的Jav…

C++ 创建文件夹的几种方式汇总确定不来看看???

点击上方蓝字关注我&#xff0c;了解更多咨询1、使用 system() 调用 dos 命令。2、使用头文件 direct.h 中的 access 和 mkdir 函数。关于 direct.h 我觉得 维基百科 上介绍的不错3、调用 Windows API 函数。4、调用 MFC 封装好的接口函数。不推荐此方法&#xff0c;出错的话会…

java语言使用箭头键画线_Java:使用带箭头键的按键

按向下箭头键启动程序,首先观察字符串.这里看一下这个示例程序&#xff1a;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class KeyBindingExample{private void createAndDisplayGUI(){JFrame frame new JFrame("Key Binding Example")…

et游戏自动翻译工具_ET的异常翻译

et游戏自动翻译工具前段时间&#xff0c;我写了一篇有关用AspectJ进行异常转换的小博客文章。 在此博客文章中&#xff0c;我们将看到如何使用ET及其更轻松的Java 8方法来实现相同的目的。 动机 异常转换&#xff08;或异常转换&#xff09;是将一种类型的异常转换为另一种类型…

同步代码和异步代码_告别异步代码

同步代码和异步代码Quasar是一个将真正的轻量级线程&#xff08;纤维&#xff09;添加到JVM的库。 它们非常便宜且非常快-实际上&#xff0c;光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码&#xff0c;同时享受与复杂异步代码相同的性能优势。 在本文中…

java socket 传送进度_java-★-Socket文件上传/进度条

客户端代码&#xff1a;1、客户端运行程序&#xff1a;package wtb.khd;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import …

c语言中typedef和define的区别

点击上方蓝字关注我&#xff0c;了解更多咨询1、typedef仅限于为类型定义符号名称。define不仅可以为类型定义别名&#xff0c;还可以为数值定义别名。例如&#xff0c;可以将1定义为ONE。2、typedef由编译器解释&#xff0c;define语句由预编译器处理。实例#include <stdio…

c语言中预处理器是什么?

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言有预处理器&#xff0c;Java中没有这个概念&#xff0c;其实只是文本替换工具。2、C的预处理器&#xff0c;即CPP&#xff0c;将在实际编译器中完成处理&#xff0c;所有预处理命令将从#开始。实例#include <stdio.h>…

java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题

JSON轻量级的数据交换格式相对于XML来说&#xff0c;JSON的解析速度更快&#xff0c;文档更小。JSON的格式{属性名:属性值,属性名:属性值,……}属性名的类型可以是string,number,boolean,null,object,且属性名必须用双引号引起来&#xff0c;如果属性值是字符串&#xff0c;也必…

垃圾回收算法以及垃圾回收器_什么是垃圾回收?

垃圾回收算法以及垃圾回收器以下是我们的垃圾收集手册中的一个示例&#xff0c;该手册将在接下来的几周内发布。 同时&#xff0c;花点时间熟悉垃圾收集的基础知识-这将是本书的第一章。 乍一看&#xff0c;垃圾收集应该处理顾名思义的问题–查找并丢弃垃圾。 实际上&#xff…

c语言中fgetc函数的介绍

点击上方蓝字关注我&#xff0c;了解更多咨询1、fgetc函数返回的字符实际上是文件流中位置指针指向的字符。当fgetc函数读取错误时&#xff0c;返回EOF并设置文件错误标志位。2、该函数以无符号char强制转换为int的形式返回读取的字符&#xff0c;如果到达文件末尾或出现读错&a…

java中什么表示打印_在java中打印对象时会发生什么

您不需要调试器就能知道发生了什么.System.out是PrintStream类型.PrintStream.println(Object)的javadoc说&#xff1a;Prints an Object and then terminate the line. This method calls at first String.valueOf(x) to get the printed object’s string value, then behave…

魔术笔反选_魔术二传手反图案

魔术笔反选设置者和获取者是邪恶的。 创建JavaBean定义时&#xff0c;这似乎是个好主意。 但是它们对Java社区造成了很大的伤害。 通常不如null指针那么多&#xff0c;但足够了。 首先&#xff0c;许多初级人员相信实现setter和getter&#xff08;嘿&#xff0c;在Eclispe中只…

花5分钟了解C语言基本语法元素快来

点击上方蓝字关注我&#xff0c;了解更多咨询C语言是一种编程语言&#xff0c;和其它语言一样&#xff0c;也定义了自己的语法和词汇。学习C语言&#xff0c;首先要学习C语言的词汇&#xff0c;再学习C语言的语法规则&#xff0c;然后由词汇构成语句&#xff0c;由语句构成源程…

java8 策略模式_Java 8中的策略模式

java8 策略模式这是两个有关如何使用Java 8功能样式以及Cyclops模式匹配和Hamcrest库来实现策略模式设计的示例。 PrintDependingOnInput方法是一种策略&#xff0c;该策略将根据传递的日志对System.println一些消息。 AddPrefix是另一种策略&#xff0c;它将根据邮件内容向邮…