Spring中依赖注入的使用和配置
使用方法1:
//在执行此实例化的时候就会完成所有注入
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserService service = (UserService)ctx.getBean("userService");
使用方法2:
public class SocketRequest {
/**
* 默认实例
*/
private static final SocketRequest INSTANCE = new SocketRequest();
/**
* 获取默认实例
*
* @return 默认实例
*/
public static SocketRequest get() {
return INSTANCE;
}
/**
* 处理系统控制器操作方法
*
* @param context
* spring上下文
*/
public void methodHolder(ApplicationContext context) {
String[] beans = context.getBeanDefinitionNames();//通过此方法可以获得所有的注入类
}
}
public class GameServer implements ApplicationContextAware{
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
SocketRequest.get().methodHolder(arg0);
}
}
public class mainServer { public static void main(String[] args) { //在执行此实例化的时候就会完成所有注入,同时会调用GameServer的setApplicationContext方法
GameServer server = new ClassPathXmlApplicationContext("server.xml").getBean(GameServer.class);
}
}
Spring配置
1.属性中引用另外的bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- IoC控制反转 -->
<bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">
</bean>
<!-- 属性中引用另外的bean-->
<bean id="userService" class="com.bjsxt.service.UserService">
<property name="userDAO" ref="u" />
</bean>
</beans>
2.有构造函数的注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- IoC控制反转 -->
<bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">
</bean>
<bean id="userService" class="com.bjsxt.service.UserService">
<!-- 有构造函数的注入 -->
<constructor-arg>
<ref bean="u" />
</constructor-arg>
</bean>
</beans>
3.有属性的注入,直接把属性写入,很少用到
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- IoC控制反转 -->
<bean name="u" class="com.bjsxt.dao.impl.UserDAOImpl">
<!-- 有属性的注入,直接把属性写入,很少用到 -->
<property name="daoId" value="123"></property>
<property name="daoStatus" value="DDD"></property>
</bean>
<!-- 可以写id也可以写name(如果是name则可以写特殊字符) -->
<bean id="userService" class="com.bjsxt.service.UserService">
<constructor-arg>
<ref bean="u" />
</constructor-arg>
</bean>
</beans>
4.scope范围,默认是singleton即单例,如果是prototype则每次是新实例
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- IoC控制反转 -->
<bean name="u" class="com.bjsxt.dao.impl.UserDAOImpl">
<property name="daoId" value="123"></property>
<property name="daoStatus" value="DDD"></property>
</bean>
<!-- scope范围,默认是singleton即单例,如果是prototype则每次是新实例 -->
<bean id="userService" class="com.bjsxt.service.UserService" scope="prototype">
<constructor-arg>
<ref bean="u" />
</constructor-arg>
</bean>
</beans>
5.可以注入集合类型
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- IoC控制反转 -->
<bean name="u" class="com.bjsxt.dao.impl.UserDAOImpl">
<!-- 可以注入集合类型 -->
<property name="sets">
<set>
<value>1</value>
<value>2</value>
</set>
</property>
<property name="lists">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<property name="maps">
<map>
<entry key="1" value="1"></entry>
<entry key="2" value="2"></entry>
<entry key="3" value="3"></entry>
<entry key="4" value="4"></entry>
</map>
</property>
</bean>
<bean id="userService" class="com.bjsxt.service.UserService"
scope="prototype">
<constructor-arg>
<ref bean="u" />
</constructor-arg>
</bean>
</beans>
6.自动装配
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<!-- IoC控制反转 -->
<bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl">
<property name="name" value="myname"></property>
</bean>
<!-- 自动装配(用的不多):
byName按名称自动匹配(即要装配的bean中的属性名称和配置中的bean名称相同就会自动装配,如UserService类中的属性和userDAO的bean名称相同就自动装配)
byType按类型自动匹配 (即要装配的bean中的属性类型和配置中的bean的类型相同就会自动装配,如UserService类中的属性类型和userDAO的bean类型相同就自动装配)
-->
<bean id="userService" class="com.bjsxt.service.UserService"
autowire="default">
</bean> </beans>
7.初始化bean时执行init-method方法和销毁的时候执行destroy-method方法
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-autowire="byName" >
<!-- IoC控制反转 -->
<bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl">
<property name="name" value="myname"></property>
</bean>
<!-- 初始化bean时执行init-method方法和销毁的时候执行destroy-method方法 -->
<bean id="userService" class="com.bjsxt.service.UserService"
init-method="init" destroy-method="destroy">
</bean>
</beans>
8.使用注解
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config></context:annotation-config>
</beans>
9.扫描包名,包名下的类都可以注入。
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.bjsxt"></context:component-scan>
</beans>
10.实际项目配置参考
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.eelpo.com/schema/jdbc" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.eelpo.com/schema/jdbc
http://www.eelpo.com/schema/jdbc/jdbc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder location="classpath:system.properties" /> <context:component-scan base-package="com.egaplay.foi.controller" />
<context:component-scan base-package="com.egaplay.foi.core.listener" />
<context:component-scan base-package="com.egaplay.foi.tools.controller" />
<context:component-scan base-package="com.egaplay.foi.module.*.service" />
<context:component-scan base-package="com.egaplay.foi.module" resource-pattern="Context.class" /> <jdbc:repositories base-package="com.egaplay.foi.module.*.dao"></jdbc:repositories> <bean class="com.eelpo.framework.socket.server.GameServer">
<property name="port" value="${port}" />
<property name="shutdownPort" value="${shutdownPort}" />
<property name="crossDomainPort" value="${crossDomainPort}" />
<property name="startCrossDomainServer" value="${startCrossDomainServer}" />
<property name="shutdownCommand" value="${shutdownCommand}" />
<property name="executionHandler" ref="executionHandler" />
<property name="socketIdleStateHandler" ref="socketIdleStateHandler" />
<property name="gameServerListener" ref="foiServerListener" />
<property name="socketIdleListener" ref="foiSocketIdleListener" />
<property name="socketSessionListener" ref="foiSocketSessionListener" />
<property name="socketContextListener" ref="foiSocketContextListener" />
<property name="socketRequestListener" ref="foiSocketRequestListener" />
</bean> <bean id="executionHandler" class="org.jboss.netty.handler.execution.ExecutionHandler">
<constructor-arg index="0">
<bean class="org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor">
<constructor-arg index="0" value="${threadPool.corePoolSize}" type="int" />
<constructor-arg index="1" value="${threadPool.maxChannelMemorySize}" type="long" />
<constructor-arg index="2" value="${threadPool.maxTotalMemorySize}" type="long" />
<constructor-arg index="3" value="${threadPool.keepAliveTime}" type="long" />
<constructor-arg index="4" value="SECONDS" type="java.util.concurrent.TimeUnit" />
<constructor-arg index="5">
<bean class="com.eelpo.framework.utils.concurrent.NamedThreadFactory">
<constructor-arg index="0" value="Business Process #" />
</bean>
</constructor-arg>
</bean>
</constructor-arg>
</bean> <bean id="socketIdleStateHandler" class="com.eelpo.framework.socket.server.handler.SocketIdleStateHandler">
<constructor-arg index="0" ref="foiSocketIdleListener" />
<constructor-arg index="1">
<bean class="org.jboss.netty.util.HashedWheelTimer">
<constructor-arg index="0" value="${wheelTimer.tickDuration}" type="long" />
<constructor-arg index="1" value="SECONDS" type="java.util.concurrent.TimeUnit" />
<constructor-arg index="2" value="${wheelTimer.ticksPerWheel}" type="int" />
</bean>
</constructor-arg>
<constructor-arg index="2" value="${socketIdle.readerIdleTimeSeconds}" type="int" />
<constructor-arg index="3" value="${socketIdle.writerIdleTimeSeconds}" type="int" />
<constructor-arg index="4" value="${socketIdle.allIdleTimeSeconds}" type="int" />
</bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="url" value="${jdbc.url}" />
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="connectionProperties" value="${jdbc.connectionProperties}" />
<property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" />
<property name="defaultCatalog" value="${dbcp.defaultCatalog}" />
<property name="initialSize" value="${dbcp.initialSize}" />
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="maxIdle" value="${dbcp.maxIdle}" />
<property name="minIdle" value="${dbcp.minIdle}" />
<property name="maxWait" value="${dbcp.maxWait}" />
<property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" />
<property name="numTestsPerEvictionRun" value="${dbcp.numTestsPerEvictionRun}" />
<property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" />
<property name="poolPreparedStatements" value="${dbcp.poolPreparedStatements}" />
<property name="maxOpenPreparedStatements" value="${dbcp.maxOpenPreparedStatements}" />
<property name="accessToUnderlyingConnectionAllowed" value="${dbcp.accessToUnderlyingConnectionAllowed}" />
<property name="removeAbandoned" value="${dbcp.removeAbandoned}" />
<property name="removeAbandonedTimeout" value="${dbcp.removeAbandonedTimeout}" />
<property name="logAbandoned" value="${dbcp.logAbandoned}" />
</bean>
</beans>
Spring中依赖注入的使用和配置的更多相关文章
- 使用IDEA详解Spring中依赖注入的类型(上)
使用IDEA详解Spring中依赖注入的类型(上) 在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值)注入Bean组件 ...
- Spring中依赖注入的四种方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...
- spring中依赖注入
理解依赖注入:参考https://blog.csdn.net/taijianyu/article/details/2338311 一.依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编 ...
- spring中依赖注入与aop讲解
一.依赖注入 这个属于IOC依赖注入,也叫控制反转,IOC是说类的实例由容器产生,而不是我们用new的方式创建实例,控制端发生了改变所以叫控制反转. 1 2 3 4 5 6 7 8 9 10 11 1 ...
- Spring点滴七:Spring中依赖注入(Dependency Injection:DI)
Spring机制中主要有两种依赖注入:Constructor-based Dependency Injection(基于构造方法依赖注入) 和 Setter-based Dependency Inje ...
- Spring系列.依赖注入配置
依赖注入的配置 Spring的依赖注入分为基于构造函数的依赖注入和基于setter方法的依赖注入. 基于构造函数的依赖注入 <!-- 通过构造器参数索引方式依赖注入 --> <bea ...
- Spring IOC 依赖注入的两种方式XML和注解
依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...
- (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)
Spring要把xml配置中bean的属性实例化为具体的bean,"依赖注入"是关卡.所谓的"依赖注入",就是把应用程序对bean的属性依赖都注入到spring ...
- Spring的依赖注入(DI)三种方式
Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个 ...
随机推荐
- RESTful架构
RESTful架构 1.什么是RESTful API设计原则 REST是Representational State Transfer的简写,意为“表现层状态转换” 是一种对资源状态进行操作的设计规则 ...
- apache mesos 安装
安装方式: Mesosphere yum 操作系统:centos7 1. 安装 rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesos ...
- .net 开源 JavaScript 解析引擎
1. Javascript .NET 地址为:http://javascriptdotnet.codeplex.com/ 使用方法: Quick Start This section provides ...
- 64位python安装MySQL-python 1.2.5
在64位的python直接安装MySQL-python 1.2.5有问题,参考http://www.linuxfly.org/windows_install_mysql_python_library/ ...
- android 完全退出应用程序(重要)
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个A ...
- apache反向代理 负载均衡
开启模块: LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule slotmem_sh ...
- eclipse项目里面的类有时候会莫名其妙出现很多错误
由于eclipse的编译是基于时间戳的判断机制的.因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译.因此你可以先clean一下再编译.这个时候eclipse会将 ...
- mysql常用命令集锦
一.DCL语句(数据控制语句) 1.授权远程访问,针对IP和用户.DB的 grant {privilege list} on {dbname}.* to '{user}'@'{ip}' identif ...
- linux ubuntu系统下,adb不是内部命令 (如何才能让adb命令可以使用)
linux ubuntu系统下,adb不是内部命令 原文地址 linux ubuntu系统下,adb不是内部命令 解决方法: 1.sudo gedit ~/.bashrc 2.将下面的两句加到上面打开 ...
- ubuntu安装sublime
添加sublime text 3的仓库: sudo add-apt-repository ppa:webupd8team/sublime-text-3 更新软件库 sudo apt-get updat ...