二.控制反转(IoC)
针对接口编程,而不是实现:
IoC设计模式,重点关注组件的依赖性,配置以及生命周期.IoC将创建对象实力的任务交给IoC容器或者框架.使得应用代码只需要直接使用实力.
BeanFactory:是轻量级的,处于Spring 框架的核心.可用于Applet和单独的Swing开发.在创建BeanFactory实力的时候,实际上是完成了JavaBean的实力化的创建,配置,以及管理.即BeanFactory在访问和操作IoC容器初期充当了IoC容器的作用.
基于ClassPath找到资源文件:
Rsource resource = new ClassPathResource("appcontext.xml";
BeanFactory factory = new XmlBeanFactory(resource);
HelloWorld hw = (HelloWorld )factory.getBean("fileHelloWorld";
基于文件找到资源文件 :
try{
InputStream ins = new FileInputStream("src/appcontext.xml";
BeanFactory factory = new XmlBeanFactory(ins);
HelloWorld hw = (HelloWorld)factory.getBean("fileHelloWorld";
}catch(FileNotFoundException ex){
log.error("sssssss";
}
基于ApplicationContext实现类找到资源文件:
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[]{"appcontext.xml"});
BeanFactory factory = (BeanFactory)appContext;
HelloWorld hw = (HelloWorld )factory.getBean("fileHelloWorld";
2.bean的生命周期:
定义JavaBean:借助于构件器创建JavaBean实例.
<bean name = "fileHelloWorld" class = "com.openv.spring.HelloWorld">这样 HelloWorld 实例将使用无参构造函数创建出来.
由于遗留代码问题,需要借助工厂方法创建JavaBean实例.
<bean name = "fileHelloWorld"
class = "com.openv.spring.HelloWorld"
factory-method = "createHelloWorldInstance">
此时HelloWorld 必须提供createHelloWorldInstance静态方法。
如果类没有提供静态方法:
<bean name="helloworldfactory"
class = "com.openv.spring.HelloWorldFactory"/>
<bean name = "fileHelloWorld"
factory-bean = "helloworldfactory"
factory-method = "createHelloWorldInstance">
初始化JavaBean:
1.检查是否使用了autowire
2.检查是否使用了dependency-check
3.借助与setter法官法,把JavaBean的属性注入进来.
4.Spring提供了若干接口,使开发者改变配置BeanFactory初始化JavaBean时的行为和使用,例如IniializingBean接口.BeanFactory初始化JavaBean时会调用那些实现了该接口的JavaBean中包含了的void afterPropertiesSet() throws Exception
5.调用init-method属性.
使用JavaBean:
销毁JavaBean: 一旦Spring停止,.Spring框架会调用JavaBean中的生命周期方法,比如是了DisposableBean接口的JavaBean ,或者那些在Spring配置文件中指定了destroy-method属性的JavaBean.
注意:这些内容只适合于singleton方式创建的JavaBean.
抽象Bean和子Bean定义:<后面介绍>
PropertyPlaceholderConfigurer和PropertyOverrideConfigurer:能够在Spring配置文件外部配置其他应用需要使用的属性.
BeanFactoryAware和BeanNameAware:对于某些基于Spring的应用而言,有一种需求,即将应用的BeanFactory事例注入到JavaBean中,比如,为在某JavaBean事例中动态获得BeanFactory创建的某个单例JavaBean.但是该单例JavaBean没有显示的使用它.此时要借助于BeanFactoryAware.
<bean id = "dataSource"
class = "org.springframework.jnid.JndiObjectFactoryBean">
<property name = "jnidName">
<value>java:/MySqlDS</value>
</property>
</bean>
<bean id = ""example
class = "ss.ss.s..s..s.Example">
<property name = "userinfo">
<ref local = "userinfoDAO">
</property>
</bean>
如果example中需要使用dataSource.但是在Spring配置文件没有显示的配置,那么Example需要实现BeanFactoryAware接口.如果需要在JavaBean 中获得配置的名字,考虑实现BeanNameAware接口.
ApplicationContext:
开发者不需要提供手工创建ApplicationContext实力.变可以通过声明的方式使用.
org.springframework.web.context.ContextLoaderServlet
或者
org.springframework.web.context.ContextLoaderListener
能够在Web应用启动时自动实力化ApplicationContext对象.
开发需要注意的是Log4jConfigListener类:供配置Spring应用的日志使用:
<context - param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<Listener>
<listener - calss>
org.springframework.web.util.log4jConfigListener
</listener-class>
</Listener>
web应用中创建ApplicationContext:
<context - param>
<param-name>contextConfigLaction</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
...............................
<Listener>
<listener - calss>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</Listener>
............. <以上适合于Servlet2.3>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
分享到:
相关推荐
2. **Spring MVC**:Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它遵循模型-视图-控制器(Model-View-Controller, MVC)设计模式,将业务逻辑、数据和用户界面分离。在日记系统中,Spring MVC负责...
SpringBoot学习日记(一-六)是一系列关于Spring Boot技术的深入探讨,涵盖了从基础到进阶的应用。Spring Boot是Spring框架的一个简化版,旨在简化Java应用的初始搭建以及开发过程,它内置了Tomcat服务器并默认配置了...
【Java进阶学习日记】是一份全面且深入的Java学习资料,旨在帮助已经掌握基础的开发者进一步提升技能,同时也适合正在寻找工作的Java学习者作为面试准备。这份学习笔记涵盖了广泛的Java相关主题,从底层的计算机操作...
2. **SpringBoot框架**:SpringBoot简化了Spring配置,通过自动配置和起步依赖,使得开发者能够快速创建一个可运行的应用。它集成了Spring MVC、Spring Data JPA、Spring Security等,用于构建Web应用、数据访问和...
SSH框架,即Struts2、Spring和Hibernate的组合,是Java企业级开发中的常用技术栈。下面将分别对这三个框架的核心机制进行详细介绍。 **Struts2机制** 1. **核心控制器 FilterDispatcher**:Struts2的基础,负责...
项目代码已经发布到GitHub,供大家参考和学习。 二、技术栈选型 项目选择了Java 1.8作为开发语言,Maven 3.8.1作为依赖管理工具,SpringBoot 2.5.1作为基础框架,Tomcat作为应用服务器。同时,项目还使用了MyBatis...
总的来说,个人网上日记本项目涵盖了Web开发中的多个核心知识点,包括MVC架构、数据库操作、前端交互和文件处理等,对于学习和理解Web开发流程具有很高的参考价值。无论是初学者还是有一定经验的开发者,都能从中...
这篇日记记录了作者在计算机实习的经历,涵盖了jsp开发、Tomcat服务器、SQL Server2000数据库、Struts、Spring、Hibernate框架等多个知识点。 关于JSP开发 JSP(Java Server Pages)是一种基于Java的服务器端脚本...
在学习英语的过程中,写日记是一个非常有效的练习方式,尤其在新年这个特殊时刻,通过英语日记可以记录下个人的感受、家乡的变化以及新年的快乐气氛。以下是两篇初中生新年英语日记的示例,我们可以从中学习到一些...
在Java实训中,我们可以学习到 viele 实践经验,掌握Java编程语言和Spring MVC框架的使用技术。 * 在Java实训中,我们需要掌握基本的Java编程技术,了解Spring MVC框架的基本概念和实践操作,掌握使用Spring MVC框架...
2. **自动配置(Auto Configuration)**:Spring Boot 根据类路径中的 jar 包和配置文件自动进行配置,极大地减少了手动编写配置的工作量。 3. **内嵌服务器(Embedded Server)**:Spring Boot 可以内嵌Tomcat、...
Java程序日记本是一个用于记录和学习Java编程过程中遇到的问题、解决方案以及心得的资源集合。它可能包含了一系列关于Java编程的笔记、代码示例、调试技巧和项目实践等内容,旨在帮助开发者提升技能,解决实际问题。...
这是一个基于Java技术实现的...总的来说,这个基于Java的个人日记本系统毕业设计项目是一个全面的学习资源,涵盖了从编程语言到数据库设计,再到Web应用开发和部署的多个重要方面,对于提升学生的综合技能非常有帮助。
这篇实习日记记录了作者在实习期间的所见所闻,包括了对 Java 编程的学习和实践经验。以下是从这篇日记中提炼出来的知识点: 1. 实习第一天的感受:作者在实习的第一天感受到了一些不适应,主要是因为从学校的作息...
2. **Java编程和开源框架**:作者提到了Struts、Spring和Hibernate这三个Java开源框架,它们分别是MVC(模型-视图-控制器)架构、依赖注入和对象关系映射的解决方案。这些框架简化了企业级Web应用的开发,但理解和...
2. **Spring MVC**:Spring MVC是Spring框架的一部分,负责处理HTTP请求和响应。它将用户的请求转发给控制器,控制器调用业务逻辑处理后,返回视图名,最后由视图解析并展示结果。在日记管理系统中,Spring MVC可以...
2. **Struts集成**:在Struts的Action类中,我们可以注入Spring管理的日志组件,然后在执行业务逻辑时记录相关信息。此外,需要在Struts的配置文件中定义Action映射,以便处理日记相关的HTTP请求。 3. **Hibernate...
这个项目的源码提供了使用Spring 2.5、Struts 2和Hibernate 3.2构建应用程序的实例,这对于学习和理解SSH框架的整合及实际应用有着重要的参考价值。 Spring是一个全面的后端应用程序框架,它提供了依赖注入(DI)和...
Spring框架是中国著名的Java企业级应用...通过学习和实践这些案例,你可以更好地理解Spring如何帮助构建健壮的、可维护的企业级Java应用。在实际项目中,结合个人博客的讲解,可以加深对Spring的理解,提升开发技能。
Struts2.0 + Spring + Hibernate + DWR 对于三大框架目前还在学习阶段,做得不好的地方欢迎来mail指正yukiceo@126.com,或http://blog.csdn.net/yukiceo 每天面对大量的知识,时间一长,容易造成某些知识点的生疏...