zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    制造业接入物联网的4大优势
    一篇文章读懂什么是串口通信及其工作原理
    4G工业路由器在仓储物流中的应用
    4G工业路由器应用于远程医疗设备监控
    串口服务器在饮料自动化生产线的应用
    PLC和串口服务器在数字化工厂中的作用
    LoRa集中器在石油勘探等领域的应用解决方案
    4G模块为基础的物联网在精准农业中的应用
    4G工业路由器在垃圾和废水处理的应用案例
    HDU 6205 2017沈阳网络赛 思维题
  • 原文地址:https://www.cnblogs.com/zhuawang/p/4075143.html
Copyright © 2011-2022 走看看