首页 > 代码库 > Spring中依赖注入的使用和配置

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="http://www.mamicode.com/${port}" />        <property name="shutdownPort" value="http://www.mamicode.com/${shutdownPort}" />        <property name="crossDomainPort" value="http://www.mamicode.com/${crossDomainPort}" />        <property name="startCrossDomainServer" value="http://www.mamicode.com/${startCrossDomainServer}" />        <property name="shutdownCommand" value="http://www.mamicode.com/${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="http://www.mamicode.com/${threadPool.corePoolSize}" type="int" />                <constructor-arg index="1" value="http://www.mamicode.com/${threadPool.maxChannelMemorySize}" type="long" />                <constructor-arg index="2" value="http://www.mamicode.com/${threadPool.maxTotalMemorySize}" type="long" />                <constructor-arg index="3" value="http://www.mamicode.com/${threadPool.keepAliveTime}" type="long" />                <constructor-arg index="4" value="http://www.mamicode.com/SECONDS" type="java.util.concurrent.TimeUnit" />                <constructor-arg index="5">                    <bean class="com.eelpo.framework.utils.concurrent.NamedThreadFactory">                        <constructor-arg index="0" value="http://www.mamicode.com/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="http://www.mamicode.com/${wheelTimer.tickDuration}" type="long" />                <constructor-arg index="1" value="http://www.mamicode.com/SECONDS" type="java.util.concurrent.TimeUnit" />                <constructor-arg index="2" value="http://www.mamicode.com/${wheelTimer.ticksPerWheel}" type="int" />            </bean>        </constructor-arg>        <constructor-arg index="2" value="http://www.mamicode.com/${socketIdle.readerIdleTimeSeconds}" type="int" />        <constructor-arg index="3" value="http://www.mamicode.com/${socketIdle.writerIdleTimeSeconds}" type="int" />        <constructor-arg index="4" value="http://www.mamicode.com/${socketIdle.allIdleTimeSeconds}" type="int" />    </bean>    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        <property name="username" value="http://www.mamicode.com/${jdbc.username}" />        <property name="password" value="http://www.mamicode.com/${jdbc.password}" />        <property name="url" value="http://www.mamicode.com/${jdbc.url}" />        <property name="driverClassName" value="http://www.mamicode.com/${jdbc.driverClassName}" />        <property name="connectionProperties" value="http://www.mamicode.com/${jdbc.connectionProperties}" />        <property name="defaultAutoCommit" value="http://www.mamicode.com/${dbcp.defaultAutoCommit}" />        <property name="defaultCatalog" value="http://www.mamicode.com/${dbcp.defaultCatalog}" />        <property name="initialSize" value="http://www.mamicode.com/${dbcp.initialSize}" />        <property name="maxActive" value="http://www.mamicode.com/${dbcp.maxActive}" />        <property name="maxIdle" value="http://www.mamicode.com/${dbcp.maxIdle}" />        <property name="minIdle" value="http://www.mamicode.com/${dbcp.minIdle}" />        <property name="maxWait" value="http://www.mamicode.com/${dbcp.maxWait}" />        <property name="timeBetweenEvictionRunsMillis" value="http://www.mamicode.com/${dbcp.timeBetweenEvictionRunsMillis}" />        <property name="numTestsPerEvictionRun" value="http://www.mamicode.com/${dbcp.numTestsPerEvictionRun}" />        <property name="minEvictableIdleTimeMillis" value="http://www.mamicode.com/${dbcp.minEvictableIdleTimeMillis}" />        <property name="poolPreparedStatements" value="http://www.mamicode.com/${dbcp.poolPreparedStatements}" />        <property name="maxOpenPreparedStatements" value="http://www.mamicode.com/${dbcp.maxOpenPreparedStatements}" />        <property name="accessToUnderlyingConnectionAllowed" value="http://www.mamicode.com/${dbcp.accessToUnderlyingConnectionAllowed}" />        <property name="removeAbandoned" value="http://www.mamicode.com/${dbcp.removeAbandoned}" />        <property name="removeAbandonedTimeout" value="http://www.mamicode.com/${dbcp.removeAbandonedTimeout}" />        <property name="logAbandoned" value="http://www.mamicode.com/${dbcp.logAbandoned}" />    </bean></beans>

 

Spring中依赖注入的使用和配置