spring aop示例_Spring查找方法示例
spring aop示例
当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean。
getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想要一个依赖bean的新实例,那么您可能将不得不采用另一种方法。
在本文中,我们将看到一个使用lookup-method
属性的方法注入的示例。
依存关系
添加以下依赖项:
spring-core
spring-context
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
是一个抽象类,它具有两个方法makePizza
和makeVeggiesPizza()
,这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;}
}
我们将makePizza
和makeVeggiePizza
配置为lookup-method
。 我们配置了一个普通的比萨饼和一个素食比萨饼豆。 每个抽象方法将具有一个<lookup-method元素。 name
属性将是方法名称,并且bean将指向配置的bean。 在这里,我们将pizza
和veggiePizza
都配置为原型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查找方法示例相关推荐
- spring aop示例_Spring Profile模式示例
spring aop示例 最近,我们介绍了Spring Profiles的概念. 此概念是针对不同部署环境的轻松配置区分符. 直接的用例(已提出)是对相关的类进行注释,以便Spring根据活动的配置文 ...
- Spring查找方法示例
当一个bean依赖于另一个bean时,我们使用setter属性或通过构造函数注入bean. getter方法将向我们返回已设置的引用,但是假设您每次调用getter方法时都想要一个依赖bean的新实例 ...
- Spring AOP无法拦截内部方法调用-- expose-proxy=true用法
假设一个接口里面有两个方法: package demo.long;public interface CustomerService { public void doSomething1(); publ ...
- spring aop获取目标对象的方法对象(包括方法上的注解)(转)
这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...
- spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...
写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...
- spring boot示例_Spring Boot REST示例
spring boot示例 Spring Boot is an awesome module from Spring Framework. Once you are used to it, then ...
- spring boot示例_Spring Boot完成示例
spring boot示例 这篇文章提供了一个使用Spring Boot开发松耦合的REST服务的完整示例. 使用spring boot,我们可以开发可独立运行的生产就绪的Java应用程序,使其成为独 ...
- java spring scope_如何在Spring中自定义scope的方法示例
大家对于 Spring 的 scope 应该都不会默认.所谓 scope,字面理解就是"作用域"."范围",如果一个 bean 的 scope 配置为 sing ...
- spring aop设计模式_Spring框架中设计模式的运用
设计模式大家可能随口就能说出总共有23种,但是具体怎么用,或者在常用的组建中有哪些体现,这时候不一定说的上来了.接下来几篇文章,我们一起深入理解.首先我们一起了解下常用的组建中是怎么运用的,比如 JD ...
最新文章
- 【记录】ASP.NET IIS ISAPI_Rewrite
- RHCE笔记1-安裝
- 生活感悟 2018-06-13
- 关于mysql触发器和存储过程的理解
- php member limit,php 安全有关问题
- Oracle数据库mybatis 插入空值时报错(with JdbcType OTHER)
- Java中常用的集合
- 在群晖synoboot.img引导文件中加入网卡驱动_群晖DS1819+使用记录
- 16.定位模板,布局和样式
- java html加密_能提供加密与解密
- 华为S2000-HI交换机与cisco的acs结合做认证
- 劝你别把开源的数据分析项目写在简历上了!!!
- 【附源码】计算机毕业设计java学科竞赛赛场安排系统设计与实现
- c语言实现学生档案管理系统
- 深度学习之前馈神经网络(前向传播和误差反向传播)
- 数据结构笔记_34 赫夫曼编码压缩、解压文件
- 数字图像位移传感器在大坝安全监测运用
- 中山大学自考网校招生简章
- python解压 tar.gz文件
- Markdownpad2错误This view has crashed问题解决记录
热门文章
- P4317-花神的数论题【组合数学】
- ATcoder-Replace Digits【线段树】
- CF1066F-Yet another 2D Walking【贪心】
- jzoj6451-[2020.01.19NOIP提高组]不幸运数字【记忆化搜索,数位dp,高精度】
- Codeforces Round #654 (Div. 2)
- 【DP】饥饿的WZK(jzoj 1998)
- 初一模拟赛总结(2019.4.13)
- [USACO]Sprinklers 2: Return of the Alfalfa P(网格DP)
- 2017西安交大ACM小学期 毁灭序列[倒跑并查集]
- 一次恐怖的 Java 内存泄漏排查实战