首页 > 编程语言 > 详细

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

时间:2014-11-05 00:09:12      阅读:309      评论:0      收藏:0      [点我收藏+]

使用方法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中依赖注入的使用和配置

原文:http://www.cnblogs.com/zhuawang/p/4075143.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!