- 浏览: 2290819 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- JAVA基础知识 (54)
- Java-IO/FIle (16)
- Java-JDBC (4)
- JAVA-新增特性-注解 (3)
- Java-枚举 (2)
- Java-泛型 (1)
- Java-多线程 (15)
- Java-XML (4)
- Java-JMS(消息服务) (4)
- Java-JVM (0)
- Web Service服务 (7)
- Jsp (10)
- js (18)
- Struts框架 (11)
- Spring框架 (29)
- Hibernate框架 (28)
- Spring Boot框架 (2)
- ExtJS前端框架 (29)
- Jquery js库 (8)
- JUnit框架 (8)
- Selenium 测试 (1)
- NoSql---Redis (6)
- ORACLE数据库 (45)
- MySQL数据库 (4)
- tomcat (3)
- Nginx反向代理服务器 (4)
- web应用服务器通用知识 (3)
- 开发工具IDE (14)
- UML建模 (1)
- SVN CVS 版本管理 (6)
- git 分布式版本管理 (4)
- 报表设计 (5)
- 文件上传下载 (2)
- 数据算法 (1)
- 存储过程 (5)
- JSON 相关 (1)
- OGNL表达式 (3)
- Util工具包 (9)
- 设计模式 (15)
- linux 相关 (3)
- life think (3)
- 工作流管理框架 (1)
- 大数据-Hadoop (1)
最新评论
-
huih:
很不错的文章
SpringMVC+Hibernate+Spring 简单的一个整合实例 -
calm01:
学习了.
Spring <bean>标签属性 Autowire自动装配(转载) -
lizhenlzlz:
我的也是拦截不了service层
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)(转载) -
josh_123:
讲的不错,很详细,如果quartz定时任务类采用不继承任何类的 ...
Spring,jdk定时任务的几种实现以及任务线程是串行还是并行执行(转载) -
human_coder:
你知道eclipse调试怎么可以回调吗?有时候总是调快了,不能 ...
Debug---Eclipse断点调试基础
迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工厂(BeanFactory的引用)中沉睡。所以,本节的目的就是要创造出一个尼奥一样的Bean,让他知道自己在工厂中的id和自己原来躺在哪个工厂中。这里,称之为,Bean对Spring有知觉。
但是有言在先,如果要在Spring容器中做到这两点,当然,可以自己通过某些方法实现,代价是大量冗余代码,好处是跟Spring解耦。如果使用Spring提供的接口,好处当然减少代码的规模,“缺点”(如果算的话)是与Spring耦合。总之,无论采取那种办法还是要看实际需要。
/////////////////////
让Bean对Name有知觉
/////////////////////
让Bean对Name有知觉
/////////////////////
作用:让Bean获取自己在BeanFactory配置中的名字(根据情况是id或者name)。
实现:通过实现BeanNameAware接口,接口中就一个方法setBeanName()
例程如下(P100,代码清单5-11,部分)
public class LogginBean implements BeanNameAware {
private String beanName = null;
public void setBeanName(String beanName) {
this.beanName = beanName;
}
}
public class LogginBean implements BeanNameAware {
private String beanName = null;
public void setBeanName(String beanName) {
this.beanName = beanName;
}
}
额外说明:
Spring自动调用。并且会在Spring自身完成Bean配置之后,且在调用任何Bean生命周期回调(初始化或者销毁)方法之前就调用这个方法。换言之,在程序中使用BeanFactory.getBean(String beanName)之前,Bean的名字就已经设定好了。所以,程序中可以尽情的使用BeanName而不用担心它没有被初始化。
当然,Bean之中一定要有个String类型变量来保存BeanName的值,这个是在编写Bean代码时有程序员手工完成的,而不是通过什么特殊的饿配置。
通常都是为了更好的饿配置Log,但是请注意,不要只是因为配合Log就把bean那么中添加任何业务含义,否则会让你自己的类关联到某个Spring特性上去,而它带来的好处却是微不足道的。如果确实需要Bean带有某种内部名称,那么最好让Bean自己实现某个方法,例如setName(),然后使用DI给每个Bean注入一个名字,这样技能保持配置Bean的名字仍然能够简洁,且你也无需修改自己的配置文件,好让Bean的名字带有业务含义。
////////////////////////////////
让Bean对工厂有知觉
////////////////////////////////
让Bean对工厂有知觉
////////////////////////////////
作用:让Bean获取配置他们的BeanFactory的引用。
实现:实现BeanFactoryAware接口,其中只有一个方法即setFactory(BeanFactory factory)。使用上与BeanNameAware接口无异,只不过BeanFactoryAware注入的是个工厂,BeanNameAware注入的是个Bean的名字。
额外说明:
虽然原书中并未提及setFactory()方法的调用时机,但是可以猜想到,这个方法可能是在根据某个配置文件创建了一个新工厂之后,Spring才调用这个方法,并把BeanFactory注入到Bean中。
让bean获取配置自己的工厂之后,当然可以在Bean中使用这个工厂的getBean()方法,但是,实际上非常不推荐这样做,因为结果是进一步加大Bean与Spring的耦合,而且,能通过DI注入进来的尽量通过DI来注入。
当然,除了查找bean,BeanFactory可以提供大量其他的功能,例如销毁singleton模式的Bean。
补充说明:
factory.preInstantiateSingletons();方法。preInstantiateSingletons()方法立即实例化所有的Bean实例,有必要对这个方法和Spring加载bean的机制做个简单说明。
factory.preInstantiateSingletons();方法。preInstantiateSingletons()方法立即实例化所有的Bean实例,有必要对这个方法和Spring加载bean的机制做个简单说明。
方法本身的目的是让Spring立即处理工厂中所有Bean的定义,并且将这些Bean全部实例化。因为Spring默认实例化Bean的情况下,采用的是lazy机制,换言之,如果不通过getBean()方法(BeanFactory或者ApplicationContext的方法)获取Bean的话,那么为了节省内存将不实例话Bean,只有在Bean被调用的时候才实例化他们。
发表评论
-
初探RestTemplate--postForObject方法直接传递对象(转载)
2020-05-01 10:22 1145https://blog.csdn.net/mryang125 ... -
Spring Boot 使用JdbcTemplate(转)
2017-03-08 15:04 1909原文地址:http://blog.csdn.net/liu ... -
使用 Spring Data JPA 简化 JPA 开发(转载)
2015-08-18 16:32 1802从一个简单的 JPA 示例开始 本文主要讲述 Spring ... -
SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)(转载)
2015-08-14 16:26 10513首先我们为什么需要做日志管理,在现实的上线 ... -
spring配置datasource的三种方式(转载)
2015-04-09 15:04 44491、使用org.springframework ... -
web应用程序和它之中的线程问题(转载)
2015-02-09 16:19 3116原文地址:http://coach.iteye.com/b ... -
spring 和rmi 的整合(转载)
2015-02-04 12:41 5240远程调用有很多种,例如: 1)远程方法调用(RMI) 2) ... -
springmvc和struts2的区别(转载)
2014-11-26 15:52 8369我们用struts2时采用的传统的配置文件的方式,并没有使 ... -
servlet/filter/listener/interceptor区别与联系(转)
2014-11-26 15:34 5275一、概念: 1、servlet: ... -
使用JUnit4测试Spring(转)
2014-07-07 18:16 11248Spring环境下的JUnit4测试 1,下载所需jar包 ... -
Spring TestContext测试框架
2014-07-07 17:21 3341直接使用Junit测试Spring程序存在的不足... 1 ... -
SpringMVC+Hibernate+Spring 简单的一个整合实例
2014-07-04 16:14 87656SpringMVC又一个漂亮的web框架,他与Struts2 ... -
Struts2、hibernate和spring下载,整合所需jar包
2014-07-04 16:00 4420ssh三个框架各自所有版本下载地址如下 Struts f ... -
Spring事务配置的五种方式(转载)
2014-06-04 11:45 2243前段时间对Spring的事务配置做了比较深入的研究,在此之 ... -
Spring,jdk定时任务的几种实现以及任务线程是串行还是并行执行(转载)
2014-03-31 17:20 12164近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候 ... -
Spring <bean>标签属性 Autowire自动装配(转载)
2014-03-31 11:21 11469在应用中,我们常常使 ... -
spring3.0注解
2013-07-29 15:39 11291.使用 @Repository、@Servi ... -
spring 抽象bean及继承(模板)
2013-07-22 17:39 14972我们在应用Spring时,在一般的设计时,肯定要用的抽象类。 ... -
Spring 定义:abstract="true" ,可适用模板
2013-07-22 17:22 2914Spring 定义:abstract="true ... -
Spring与Hibernate集成中的session问题
2013-04-15 15:53 31251.通过getSession()方法 ...
相关推荐
(3)如果Bean实现了BeanNameAware接口,则Spring调用Bean的setBeanName()方法传入当前Bean的id值。 (4)如果Bean实现了BeanFactoryAware接口,则Spring调用setBeanFactory()方法传入当前工厂实例的引用。 (5)...
com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...
java.lang.NoClassDefFoundError: org/springframework/beans/factory/BeanNameAware 1 2 根据错误加入 spring-beans-4.x.x.RELEASE.jar 1 2 接着报错 java.lang.NoClassDefFoundError: org/springframework/...
BeanFactoryAware 3.5.2.2. BeanNameAware 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. ...
BeanFactoryAware ApplicationContextAware MessageSourceAware ApplicationEventPublisherAware ResourceLoaderAware 多线程 计划任务 cron fixDelay fixRate 条件注解@Conditional ...
4.6.2 ApplicationContextAware 和BeanNameAware . 75 4.6.3 其它Aware 接口 75 4.7 Bean 定义的继承. 77 4.8 容器扩展点. 78 4.8.1 使用BeanPostProcessor 来自定义bean 78 4.8.1.1 示例:...
BeanNameAware可以获取容器中bean的名称 ApplicationContextAware当前的applicationContext,这也可以调用容器的服务 4. Bean的自动装配 byName根据属性名称自动装配-set注入 byType在容器中查找指定属性类型进行...
BeanFactoryAware BeanFactoryDataSourceLookup BeanFactoryLocator BeanFactoryPostProcessor BeanFactoryReference BeanFactoryRefreshableTargetSource BeanFactoryUtils BeanInitializationException ...
1.1 依赖注入和控制反转 ............................................................................................................................7 1.2 模块..............................................
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................