备注:Aware接口spring标记接口 表示spring的回调
-
org.springframework.beans.factory.FactoryBean
/** * 调用getBean()时spring容器每次返回 getObject()方法的返回值 * */ public class Factory implements FactoryBean<Test1> { @Override public Test1 getObject() throws Exception { return new Test1(); } @Override public Class<?> getObjectType() { return Test1.class; } @Override public boolean isSingleton() { return false; } }
<!-- 屌用Factory实例,context.getBean("&t3") --> <bean id="t3" class="i.test.Factory"/>
-
org.springframework.beans.factory.BeanNameAware
/** * 得到配置文件中,id的名字 * */ public class Test3 implements BeanNameAware { private String name; @Override public void setBeanName(String name) { this.name = name; } }
<!-- 可以直接在Test3中使用这个id --> <bean id="t3" class="i.test.Test3" />
-
org.springframework.beans.factory.InitializingBean
public class Test3 implements InitializingBean { public void setName(String name) { System.out.println("-----" + name); } /** * 属性初始化后调用该方法 */ @Override public void afterPropertiesSet() throws Exception { // System.out.println("-----"); } }
<bean id="t3" class="i.test.Test3" p:name="name"/> <!-- 在没有实现上面接口时,可以通过下面配置实现同样效果 --> <bean id="t3" class="i.test.Test3" p:name="name" init-method="afterPropertiesSet"/>
-
org.springframework.beans.factory.DisposableBean
public class Test3 implements DisposableBean{ public void setName(String name) { System.out.println("-----"+name); } /** * 对象被销毁时调用的方法, * 单例模式bean与spring容器有相同的生命周期 */ @Override public void destroy() throws Exception { // System.out.println("-----"); } }
<bean id="t3" class="i.test.Test3" p:name="name" /> <!-- 在没有实现上面接口时,可以通过下面配置实现同样效果 --> <bean id="t3" class="i.test.Test3" p:name="name" destroy-method="destroy" />
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); // 让容器关闭时回调 context.registerShutdownHook();
-
import org.springframework.context.ApplicationContextAware
public class Test3 implements ApplicationContextAware { private ApplicationContext context; /** * 通过容器初始化对象 */ public Test1 getTest1() { return context.getBean("t1", Test1.class); } /** * 可以得到spring容器 */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; } }
<bean id="t1" class="i.test.Test1" scope="prototype" /> <bean id="t3" class="i.test.Test3" />
-
Lookup method injection(可作为上面功能的简单实现版)
public abstract class Test3 { /** * 要求每次反回一个新的Test1实例 */ public abstract Test1 getTest1(); @Override public String toString() { System.out.println(getTest1()); return ""; } }
<bean id="t1" class="i.test.Test1" scope="prototype" /> <bean id="t3" class="i.test.Test3"> <!-- Spring框架通过使用CGLIB字节码生成工具,动态库生成的子类重写方法实现。 cglib这个包在spring3.2被集成进来 --> <lookup-method name="getTest1" bean="t1" /> </bean>
cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理,java自带的代理类工具proxy(被代理类必须要实现接口)ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); System.out.println(context.getBean("t3")); //i.test.Test3$$EnhancerByCGLIB$$86e9bbc0@f1afec5
相关推荐
本篇文章将深入探讨如何在Spring框架中配置和调用RMI的多个接口。 首先,我们需要了解Spring RMI服务端的配置。服务端的核心在于创建RMI服务接口和其实现。在`SpringRmiServer.zip`中,我们通常会看到以下几个关键...
在项目源代码中,你可能会看到以下几个关键部分: 1. **配置文件**:通常会有Spring的XML配置文件,这里会配置CXF的服务端点、数据源、事务管理等,以及RESTful服务的相关设置。 2. **服务接口**:定义了RESTful...
本篇文章将详细讲解标题中提到的几个关键的jar包,包括它们的功能、用途以及如何在项目中整合使用。 首先,我们来关注Spring框架的核心jar包。Spring框架的核心组件是`spring-core.jar`,它提供了基础的IoC...
在Spring框架中,面向抽象编程体现在以下几个方面: 1. **依赖注入(DI)**:Spring的核心特性之一就是DI,它允许开发者声明性地配置组件间的依赖关系。在XML配置文件中,我们可以定义Bean的接口类型,而不是具体...
这里提到的几个jar包是Spring框架的基础组件,对于初学者来说,理解它们的作用至关重要。 1. spring-core-5.0.2.RELEASE.jar:这是Spring框架的核心模块,包含了IoC(Inversion of Control,控制反转)和DI...
在Spring RMI中,主要涉及以下几个关键概念和知识点: 1. **接口定义**:首先,你需要定义一个远程服务接口,这是客户端和服务器端共享的合同。这个接口声明了可供远程调用的方法。例如: ```java public ...
Spring 2.5版本相对于之前的版本,在功能上有了很大的增强,主要体现在以下几个方面: 1. **改进了对泛型的支持**:Spring 2.5增强了对泛型的支持,使得开发者可以更方便地利用泛型来编写类型安全的代码。 2. **...
配置Zuul通常涉及到以下几个步骤: 1. 添加依赖:在`pom.xml`中,你需要引入`spring-cloud-starter-zuul`依赖,这样Spring Boot启动时就会自动加载Zuul的相关配置。 2. 配置路由:在`application.yml`或`...
这样做有以下几个好处: 1. **降低耦合**:对象不再直接创建依赖,而是通过构造函数、setter方法或者注解来接收依赖,降低了类与类之间的耦合度。 2. **增强可测试性**:依赖注入使得我们可以轻松地替换对象的依赖...
比如,`org.aopalliance.intercept.MethodInterceptor`接口定义了拦截器的接口,Spring AOP的`MethodBeforeAdvice`、`AfterReturningAdvice`等通知类型都实现了这个接口。 了解这些jar包的作用后,我们可以看到...
下面我们将对 Spring 框架中的几个重要类和接口进行详细解析。 1. DataSource 接口 DataSource 接口是 javax.sql 包下的一个接口,它提供了一个方法 getConnection(),该方法用于获取数据库连接。Spring 框架支持...
在接口文档中,我们可以看到以下几个关键接口: 1. **验证码接口**(/captchaImage):提供图形验证码,用于用户登录验证,防止恶意登录。 2. **用户登录接口**(/login):接收用户名、密码和验证码,返回状态码、...
在Spring中,这通常涉及到以下几个关键知识点: 1. **Spring MVC**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。在这个项目中,我们可能会看到Controller类,它们处理HTTP请求,并将数据传递给视图层...
Spring Boot 中的几种注入方法 在 Spring Boot 中,注入是一种非常重要的机制,用于将 bean 对象注入到其他 bean 对象中,以便实现松耦合和高内聚的设计目标。下面我们将对 Spring Boot 中的几种注入方法进行详细的...
本篇文档主要介绍了如何在 Spring MVC 中创建一个接口来返回 JSON 数据。下面我们将详细介绍整个过程: ##### 1. 项目结构 项目结构是开发过程中非常重要的部分,合理的结构有助于代码的组织和维护。对于 Spring ...
这个项目通常由以下几部分组成: 1. **Spring Boot Admin Server**:这是核心服务,提供Web界面和API来展示监控信息。它依赖于`spring-boot-starter-admin-server`模块,并且需要配置Eureka或Consul等服务发现组件...
在整合Spring Security 2.5与Spring 2.5时,需要注意以下几点: 1. **依赖管理**:确保Spring Security的jar包与Spring Framework的版本兼容。在项目中正确引入这些jar包,通常通过Maven或Gradle的依赖管理来实现。...
这个接口的存在使得Spring能够适配多种底层的事务管理系统,如JDBC、Hibernate、JPA或者其他的ORM框架。通过实现`PlatformTransactionManager`,Spring可以灵活地在不同的事务策略间切换,无需改动事务管理的代码...
本篇文章将深入探讨这两个框架,并通过几个实际的小例子来帮助理解它们的使用方式。 首先,Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。在传统的Java应用中,开发者需要编写大量...
以下将详细阐述Spring对DAO支持的几种配置方式: 1. **JDBC DAO支持:** Spring通过`JdbcTemplate`和`SimpleJdbcInsert`等类提供了对JDBC的抽象,减少了直接使用JDBC代码的繁琐性。`JdbcTemplate`提供了一组模板...