spring 的IOC是反射注入,用来管理对象的创建与销毁。一般使用都是在启动的web服务器的时候就创建了对象,可以选择自动装配对象管理,将对象引用实现与引用分开。采用的xml配置方式。及大减少了各个类的代码。

spring IOC实际配置

<beans default-autowire="byName">
<bean id="userDao" class="org.springside.modules.security.dao.UserDao" />
<bean id="deptDao" class="org.springside.modules.security.dao.DeptDao" />
<bean id="roleDao" class="org.springside.modules.security.dao.RoleDao" />
<bean id="resourceDao" class="org.springside.modules.security.dao.ResourceDao" />
<bean id="permissionDao" class="org.springside.modules.security.dao.PermissionDao" />
</beans>

属性注入    default-autowire="byName" 这个显示自动装配

public class RoleDao extends BaseHibernateDao {
private UserDao userDao; public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

spring是管理容器,负责创建创建对象,创建对象如果没有spring容器,创建的时候就是能用的时候就直接到类里面创建,如果有了spring容器,那么创建对象就是spring的事情了,这样有什么好处呢,就是能够解耦,这应该就是控制吧,就好比 (剧本 角色 饰演者)剧本需要角色,角色的实际对象是饰演者,剧本就会创建饰演者满足角色,这样就是以剧本引入角色。

public class MoAttack {
public void drama()
{
//打演员扮演剧本角色
Role role= new performer(); //剧本角色剧情展开
role.responseAsk("墨者革离!");
}
}

这样就是以剧本引入角色没有spring管理的。这样有什么问题呢,真正的饰演者也写到了剧本里面,

实际情况下应该是由导演来指定应该让谁演的。导演其实应该就是spring管理容器,这样能够将角色与饰演者分开,这就是解耦。
构造函数注入

public class MoAttack {
private Role role;
//①注入具体角色扮演者
public MoAttack(Role role){
this.role= role;
}
public void cityGateAsk(){
role.responseAsk("墨者革离!");
}
}

剧本这样呢就不关心到底是扮演这个角色,只需要你传入进来真正的饰演者就可以了。有谁来传入呢,由导演来指定谁扮演
注:借鉴

public class Director {
public void direct(){
//①指定角色的扮演者 德华
Role role= new LiuDeHua(); //②注入具体扮演者到剧本中
MoAttack moAttack = new MoAttack(geli);
moAttack.cityGateAsk();
}
}

spring 基础配置

web.xml文件

firstListener就是用来加载applicationContext.xml的监听器

spring 解决hibernate关闭及延迟的问题OpenSessionInViewFilter是将一次完成的请求与对应的线程绑定,他允许在事物提交之后加载显示所需要的对象。

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:context/applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>firstListener</param-name>
<param-value>org.springframework.web.context.ContextLoaderListener</param-value>
</context-param>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

classpath:context/applicationContext.xml

sessionFactory(依赖  dataSource  mappingDirectoryLocations    hibernateProperties   )  与下面代码对应

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:domain/hbm/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<prop key="hibernate.connection.SetBigStringTryClob">${hibernate.connection.SetBigStringTryClob}</prop>
</props>
</property>
</bean>

*****************************************************************************************

dataSource   org.apache.commons.dbcp.BasicDataSource                       (依赖driverClassName  url  username  password  )与下面对应

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName1}</value>
</property>
<property name="url">
<value>${jdbc.url1}</value>
</property>
<property name="username">
<value>${jdbc.username1}</value>
</property>
<property name="password">
<value>${jdbc.password1}</value>
</property>
</bean>

(driverClassName  url  username  password)   (依赖根目录下jdbc.properties 配置)注:项目工程一般都直接配置在tomcat  context.xml 或者server.xml里面

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>

jdbc.properties配置文件,是通过inputStream流将配置属性读入加载

jndi.default_name=
hibernate.connection.SetBigStringTryClob=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.use_query_cache=false
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect hibernate.format_sql=false
hibernate.hbm2ddl.auto=
hibernate.show_sql=false jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=
jdbc.username=
jdbc.password= jdbc.driverClassName1=oracle.jdbc.OracleDriver
jdbc.url1=
jdbc.username1=
jdbc.password1=

************************************************************************************************

----------------------------------------------------------------------------------------

mappingDirectoryLocations   hibernate映射的目录

 <property name="mappingDirectoryLocations">
<list>
<value>classpath:domain/hbm/</value>
<value>classpath:modules/</value>
</list>
</property>

-----------------------------------------------------------------------------------

hibernateProperties

<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<prop key="hibernate.connection.SetBigStringTryClob">${hibernate.connection.SetBigStringTryClob}</prop>
</props>
</property>

${hibernate.dialect}依赖于jdbc.properties里面配置  自上而下jdbc.properties配置文件,是通过inputStream流将配置属性读入加载。

java技术 spring 配置的更多相关文章

  1. Java 横向技术 Spring框架【笔记】

    Java横向技术 spring框架[笔记] Spring 的两大特性是什么? AOP(Aspect Oriented Programming,面向切面编程)与 IOC(Inverse of Contr ...

  2. Spring配置c3p0数据源时出错报:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

    今天在使用Spring配置c3p0数据源时,使用的数据库是mysql,服务器是tomcat,运行时报了一个 java.lang.NoClassDefFoundError: com/mchange/v2 ...

  3. 【JAVA】Spring 数据源配置整理

            在Spring中,不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,此外,还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试. 配置数据源 ...

  4. Spring IoC — 基于Java类的配置

    普通的POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了,每个标注了@Bean的类方法都相当于提供一个Bean的定义信息. 基于Java类的配置方法和基 ...

  5. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  6. java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)

    一.java ExecutorService实现 创建ExecutorService变量private ExecutorService executor = null 2.执行对应任务时,首先生成线程 ...

  7. spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

  8. 【Java Web开发学习】Spring配置数据源

    Spring配置数据源 转载:https://www.cnblogs.com/yangchongxing/p/10027495.html =============================== ...

  9. 【Java】Spring之基于注释的容器配置(四)

    注释是否比配置Spring的XML更好? 基于注释的配置的引入引发了这种方法是否比XML“更好”的问题.答案是每种方法都有其优点和缺点,通常,由开发人员决定哪种策略更适合他们.由于它们的定义方式,注释 ...

随机推荐

  1. 我关注的一些关于前端的文章(copy)

    本文的核心是侧重于HTML/CSS的框架,JS框架或以JS为核心的框架不讨论(比如YUI):多屏已是既定事实,虽然不是所有开发都要考虑自适应,但有自适应功能至少说明了这框架短期内不会被淘汰,所以不带自 ...

  2. 计算机网络自学之路-----IP协议(3)

    前面一期说到了IP层的IP协议跟ARP协议,因为IPV4协议自身有些不足的地方,为了弥补这些不足,又引入了一些别的协议.觉得这种弥补方式治标不治本~~ 1)ICMP网络控制报文协议 2)CIDR无类域 ...

  3. VS 2005 修复重置(深度重置)

    /resetuserdata 参数 如果 Visual Studio 在运行时被损坏,且无法从损坏状态进行恢复,您可以使用此参数将 Visual Studio 重置到其使用之初的状态.这些问题的例子可 ...

  4. jquery设置下拉菜单

    jQuery代码 1,引用jQuery库 2,show方法 3,hide方法 <script type="text/javascript"> $function(){ ...

  5. nwjs 配置文件package.json 转载

    配置文件package.json nw在启动应用程序时,首先要读取package.json文件,初始化基本属性,下面我们看看package.json的完整参数.每个参数配置都标有注释. { /**指定 ...

  6. quick sort 的简化实现

    Pivot 随机选取意义不大 第一种方法使用随机pivot,使得尽可能平均二分序列,而实际上一般来说需要排序的集合往往是乱序的,无需重新生成随机数作为pivot,大可使用固定位置的数作为pivot,这 ...

  7. js中的replace全局替换

    比如想把str中的所有“&”替换成“&” replace (\&\,"&");只是替换第一个,那么怎么全部都替换呢? replace(new Reg ...

  8. api接口签名验证

    由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...

  9. 轻量级Lua IDE ZeroBrane Studio 的使用技巧和汉化

    快捷键 : alt + shift +鼠标 ,可以块选中文本. F12 折叠/展开 所有 F5 调试运行 点击第二次 将跳转到第一个断点处 F10 单步执行 shift +F10 单步执行,不进入函数 ...

  10. Verilog HDL那些事_建模篇笔记(实验八:键盘解码)

    1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...