- 浏览: 1591892 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
spring 第1天 IOC,DI,国际化,容器事件
- 博客分类:
- Spring
1.构造注入(就是使用 构造方法)
2,设值注入(就是使用setXX()方法)
Spring 容器:最基本的接口就是BeanFactory,BeanFactory负责配置,创建,管理Bean,它有一个子接口ApplicationContext,被称为"上下文",spring 还负责管理Bean和Bean之间的关系
Spring 的配置文件
applicatoinContext:一般不会使用 BeanFactory的实例,而是使用 ApplicationContext,因为 它包含了BeanFactory的所有功能功能,而且还提供了额外的功能:
ApplicationContext支持的国际化
ApplicationContext的事件机制 :采用的是观察者设计模式,通过ApplicationEvent和ApplicationListener,就可以对ApplicationContext的事件处理
让Bean获取spring容器:只需要实现 ApplicationContextAware 接口就可以获取spring容器了
2,设值注入(就是使用setXX()方法)
package cn.sh.springmvc.service.user; import cn.sh.springmvc.dao.UserDAO; public class UserService { private String name; private int age; private UserDAO userdao; public void info(){ System.out.println("名称为:"+name+"年龄:"+age); } //设值注入 public void setName(String name) { this.name = name; } public UserService() { System.out.println("调用servie:service初始化"); } //采用构造注入 public UserService(int age) { this.age = age; } public UserService(UserDAO userdao) { super(); this.userdao = userdao; } public UserDAO getUserdao() { return userdao; } public void setUserdao(UserDAO userdao) { this.userdao = userdao; } }
<bean id="userService" class="cn.sh.springmvc.service.user.UserService" > <!--构造注入--> <constructor-arg name="age" value="18" type="int"/> <!--设值注入--> <property name="name" value="wawa"/> </bean>
Spring 容器:最基本的接口就是BeanFactory,BeanFactory负责配置,创建,管理Bean,它有一个子接口ApplicationContext,被称为"上下文",spring 还负责管理Bean和Bean之间的关系
//BeanFactory接口包含如下几个基本方法 boolean containsBean(String name); //判断spring容器中是否保航id为name的bean实例 <T> T getBean(Class<T> requiredType);//获取Spring容器中属于requiredType类型的唯一实例. Object getBean(String name); //返回容器中ID为name的Bean实例 <T> T getBean(String name,Class requiredType) ;//返回容器中ID为name,并且类型为requiredType的Bean. Class<?> getType(String name);//返回容器中指定Bean的实例类型. //BeanFactory 有一个常用的实现类:XmlBeanFactory //BeanFactory 有一个子接口:ApplicationContext 该接口的实现类有: //1:FileSystemXmlApplicationContent //2:ClassPathXmlApplicationContext //3:XmlWebApplicationContext (web中常用) //4:AnnotaionConfigXmlApplicationContext (web中常用)
//一般的java应用程序 非web InputStreamResource isr=new FileSystemResource("applicationContext.xml"); XmlBeanFactory factory=new XmlBeanFactory(isr); //或者 ClassPathResource res=new ClassPathResource("appliactionContext.xml"); XmlBeanFactory factory=new XmlBeanFactory(res); //如果有多个配置文件采用BeanFactory的子接口 ApplicationContext act=new ClassPathXmlApplicationContext(new String[]{"bean.xml","bean1.xml"}); //或者 ApplicationContext act=new FileSystemApplicationContext(new String[]{"bean.xml","bean1.xml"});
Spring 的配置文件
<!--采用 XML Schema 来定义配置文件--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd" default-autowire-candidates="*abc" default-lazy-init="true"> ...bean </beans> <!--采用DTD来定义配置文件 :--> <!--如果用DTD方式:配置文件中就不能使用spring2.X Spring3.0新增的配置标签 比如:2.x dependency-check 属性 3.0 JSP 标签, Hibernate标签, Tiles 2.2 标签 --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> ...bean </beans>
applicatoinContext:一般不会使用 BeanFactory的实例,而是使用 ApplicationContext,因为 它包含了BeanFactory的所有功能功能,而且还提供了额外的功能:
//1:ApplicatonContext 继承了MessageSource接口,因此提供了国际化支持 //2:提供了资源访问,比如URL和文件 //3:事件机制 //4:载入多个配置文件 //5:以声明的方式启动,并创建Spring容器 //当系统初始化ApplicaitonContext容器的时候,会初始化所有的singletion Bean.因此刚开始的时候可能需要消耗较大的系统开销.
ApplicationContext支持的国际化
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>message</value> <!-- 多个开头的资源文件.... --> </list> </property> </bean> <!--message_en_US.properties--> hello=welcom,{0} now=now is:{0} <!--message_zh_CN.properties--> hello=欢迎你,{0} now=现在时间是:{0} <!--native2ascii message.properties message_zh_CN.properties-->
@Test public void test1() { ApplicationContext act=new ClassPathXmlApplicationContext("classpath*:applicationContent.xml"); String [] args={"读者"}; Object [] args1={new Date()}; String hello=act.getMessage("hello", args, Locale.getDefault()); String now=act.getMessage("now", args1, Locale.getDefault()); System.out.println(hello); System.out.println(now); } //syso: //欢迎你,读者 //现在时间是:14-8-4 下午10:14
ApplicationContext的事件机制 :采用的是观察者设计模式,通过ApplicationEvent和ApplicationListener,就可以对ApplicationContext的事件处理
//定义容器事件 package cn.sh.springmvc.applicationContext; import org.springframework.context.ApplicationEvent; /** * spring 的applicationEvent 事件机制 主要采用 观察者模式 * * 1、 ContextRefreshedEvent:ApplicationContext容器初始化或者刷新时触发该事件。 2、 ContextStartedEvent:当使用ConfigurableApplicationContext接口的start()方法启动ApplicationContext容器时触发该事件。 3、 ContextClosedEvent:当使用ConfigurableApplicationContext接口的close()方法关闭ApplicationContext容器时触发该事件。 4、 ContextStopedEvent: 当使用ConfigurableApplicationContext接口的stop()方法停止ApplicationContext容器时触发该事件。 5、 RequestHandledEvent:Web相关时间,只能应用与使用DispatcherServet 的Web应用, 在使用spring作为前端的MVC控制器是,当spring处理用户请求后,系统会自动触发 该事件 * */ public class EmailEvent extends ApplicationEvent { private String address; private String text; public EmailEvent(Object source) { super(source); } public EmailEvent(Object source, String address, String text) { super(source); this.address = address; this.text = text; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getText() { return text; } public void setText(String text) { this.text = text; } } //定义一个容器监听 package cn.sh.springmvc.applicationContext; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; public class EmailNotifier implements ApplicationListener { @Override public void onApplicationEvent(ApplicationEvent evt) { if(evt instanceof EmailEvent){ EmailEvent emevt=(EmailEvent)evt; System.out.println("需要发送邮件的接收地址:"+emevt.getAddress()); System.out.println("需要发送邮件的邮件正文:"+emevt.getText()); }else { System.out.println("容器本身的事件:"+evt); } } }
//在applicationContext.xml中加入一个监听bean <bean class="cn.sh.springmvc.applicationContext.EmailNotifier"/>
//测试spring容器事件 @Test public void test2() { ApplicationContext act=new ClassPathXmlApplicationContext("classpath*:applicationContent.xml"); EmailEvent ele=new EmailEvent("hello","spring_test@163.com","this is a test"); act.publishEvent(ele);//主动触发容器事件 }
让Bean获取spring容器:只需要实现 ApplicationContextAware 接口就可以获取spring容器了
package cn.sh.springmvc.applicationContextAware; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 让Bean获取Spring容器 */ public class MyContent implements ApplicationContextAware,BeanNameAware,InitializingBean,DisposableBean{ private ApplicationContext act; private String beanName; @Override public void setApplicationContext(ApplicationContext act) throws BeansException { System.out.println("ApplicationContextAware 接口的 获取容器对象方法"); this.act=act; } public ApplicationContext getContext(){ return act; } @Override public void destroy() throws Exception { System.out.println("DisposableBean 接口的方法:即将被销毁"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("InitializingBean 接口的方法:Bean所有属性初始化完成后,执行的一个初始化方法"); } @Override public void setBeanName(String name) { System.out.println("BeanNameAware接口,获取 Bean的name"); beanName=name; } public String getBeanName() { return beanName; } }
<!--定义一个能够获取spring容器的bean --> <bean id="myContent" name="CH,CN" class="cn.sh.springmvc.applicationContextAware.MyContent" lazy-init="true"> </bean> <alias name="CH" alias="ZG"/> <alias name="chinese" alias="ZH"/> <!-- 别名之间还可以传承 --> <alias name="ZH" alias="HH"/>
//使用bean 获取 spring容器 ,一般不建议这样使用,除非有特别必要 @Test public void test3() { ApplicationContext act=new ClassPathXmlApplicationContext("classpath*:applicationContent.xml"); MyContent p=act.getBean("chinese",MyContent.class); System.out.println(p.getContext()); System.out.println(act==p.getContext()); }
发表评论
-
spring-session 中的坑
2017-07-06 15:34 10000spring-session 配置 依赖 gradle ... -
Spring AspectJ Aop Annotation
2017-03-29 17:08 713import org.aspectj.lang.Proce ... -
spring 第13天 使用@scheduled注解执行定时任务
2015-01-06 23:11 54099我们使用spring的注解 @Scheduled 执行定时任务 ... -
Spring 第12天,事务传播属性和 隔离级别
2014-09-28 00:36 8201 事务的传播属性(Propagation) 1) REQ ... -
spring 第11天 quartz任务调度
2014-08-24 13:59 1151Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
spring 第10 天 AOP 面向切面
2014-08-21 00:08 1756AOP(Aspect Orient Programming ... -
spring 第9天 Resurce 资源访问
2014-08-17 22:20 1876Spring Resource接口 spring提供的Reso ... -
spring 第8天 Spring 注解
2014-08-17 15:33 1476spring注解 @Component:标注一个普通的sp ... -
spring 第7天 Bean,BeanFactory处理器,配置器
2014-08-16 21:46 1243spring 两种后处理器 第一种,Bean 后处理器 对容器 ... -
spring 第6天SpEL,P命名空间,Util Schema
2014-08-13 22:52 1321使用p名称空间配置属性 ... -
spring 第5天不同作用域的bean,注入Field,方法返回值
2014-08-11 22:31 2119协调作用域不同步的bean 问题是;当一个singleton的 ... -
spring 第4天bean继承,init,destory-method
2014-08-10 17:54 1659深入理解Spring容器中的b ... -
spring 第3天使用java类和XML配置bean
2014-08-09 16:51 1510下面采用java类来配置bean,前面都采用xml进行配置be ... -
spring 第2天,bean作用域,自动注入集合
2014-08-06 22:16 1942sping容器中的Bean <!---beans的全 ... -
SpringMVC 注解 和非注解
2014-01-26 10:29 18024首先看看非注解的项目结构 在web.xml文件 配置spr ... -
详解spring 每个jar的作用
2013-11-19 23:54 3914spring.jar 是包含有完整 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1221为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Spring 中引用Properties文件
2013-08-29 14:39 10663其中部分配置信息(邮件发送相关): #邮件发送的相关配置 ... -
Spring IOC控制反转 依赖注入DI
2012-12-15 09:37 2334目录 1.使用IOC控制反转 中的DI依赖注入 手工注入 ... -
Spring IOC控制反转 依赖注入DI
2012-12-14 16:23 8目录 1.使用IOC控制反转 中的DI依赖注入 (两种配置方式 ...
相关推荐
为了解决这种问题,Michael Mattson提出了IOC(Inversion of Control)理论,也称为控制反转或控制倒置,它旨在通过"第三方"(即IOC容器)来降低对象间的耦合。 **二、什么是控制反转(IOC)** IOC的核心思想是将...
本章主要介绍Spring框架中的控制反转(Inversion of Control,IoC)思想,以及依赖注入(Dependency Injection,DI)与依赖查找(Dependency Lookup,DL)两种实现IoC的方式。此外,还涉及了Spring程序开发的基本...
1. **容器**:一个基础的容器类,负责管理对象的生命周期,包括实例化、装配和管理对象之间的依赖关系。 2. **bean定义**:每个需要管理的对象都会有一个对应的bean定义,包含对象的类型、构造函数、属性值等信息。 ...
在运行时,Spring IoC容器会读取这个配置文件,创建并初始化所有的bean,然后根据这些配置将依赖注入到相应的bean中。这样,当我们使用`exampleBean`时,无需手动创建`dependencyBean`,因为它已经在启动时被注入了...
这种方式比较简单易用,但可能导致Bean的初始化延迟到第一次使用时才完成。 ```xml ``` 3. **示例** - **XML格式定义的Setter DI示例** ```xml ``` - **构造器注入...
在本系列的第一篇中,我们将深入探讨Spring框架的核心特性——依赖注入(Dependency Injection,简称DI),并通过手动实现一个简易的IOC容器来理解其工作原理。Spring框架是Java开发中的基石,它提供了许多功能,如...
- **ApplicationContext**: 提供了一种更为强大的 IoC 容器实现,除了 BeanFactory 的所有功能外,还提供了更多的特性,如国际化支持、事件传播机制等。其常见的实现包括 `ClassPathXmlApplicationContext` 和 `...
本文将深入探讨Spring 2.0的第一个程序以及IoC(Inversion of Control,控制反转)的应用。 Spring 2.0的发布标志着该框架的重大进步,它引入了对Java 5和Java EE 5的支持,增强了AOP(面向切面编程)功能,并且...
### Spring培训笔记第一天:深入理解Spring框架的核心概念与实践 #### Spring框架简介 Spring框架是企业级应用开发中广泛使用的轻量级框架,它通过提供一系列的开发模式和最佳实践来简化Java应用的开发过程。...
- **含义**:传统的对象创建方式是由程序员主动通过`new`关键字来实例化对象,而在Spring框架中,这种对象创建的责任被反转给了Spring容器,即程序员不再直接控制对象的创建过程。 - **作用**:解耦,使得程序员...
1. **方便解耦,简化开发**:通过Spring提供的IoC容器,开发者可以将对象之间的依赖关系交由Spring进行管理,从而避免因硬编码而造成的程序耦合问题。同时,Spring还提供了一系列底层需求的解决方案,如单例模式类和...
Spring 框架中的 IoC (Inversion of Control) 概念,也被称作依赖注入(Dependency Injection, DI),是 Spring 框架的核心功能之一。它实现了对应用程序组件间的解耦,并允许容器管理对象的生命周期和依赖关系。 ...
手写Spring IoC的第一步是建立一个容器。这个容器需要能够读取配置信息,如XML或Java注解,来了解哪些类需要被实例化以及它们之间的依赖关系。例如,我们可以创建一个`BeanFactory`接口,用于管理和存储bean,然后...
在本Java练习中,我们将深入理解并实现Spring框架的核心组件——IoC(Inversion of Control,控制反转)容器。这个练习分为三个主要部分,旨在帮助我们掌握XML配置文件的读取,模拟Spring的IoC机制,以及对Struts...
然而,IOC通过引入一个第三方,通常是容器,如Spring框架,来管理对象的生命周期和它们之间的依赖关系,从而降低了耦合度。 在Spring框架中,IOC的核心是Bean容器,它负责创建、配置和管理对象。开发者只需定义对象...
Spring 的 IoC 容器是框架的核心组件,它负责管理和实例化 Bean,并提供了依赖注入和控制反转的功能。 Spring 的 IoC 容器可以自动装配 Bean,包括通过 XML 文件和注解来配置 Bean。 在 Spring 中,AOP(Aspect-...
懒惰初始化可以使用 lazy-init 属性来设置对象“懒惰”初始化,bean 对象在容器启动时候不会初始化,在第一次使用时候才初始化。 在 Spring 框架中,工厂方法是一种封装了复杂的对象创建过程,提供一个简单方法作为...
- 轻量级、松耦合的容器:Spring的IoC容器是一种轻量级的控制反转容器,它负责创建对象、管理对象的生命周期,并通过依赖注入减少代码的依赖性。 - 集成现有的技术:Spring集成了许多第三方库如Hibernate、JPA、...