SpringIOC与AOP

<?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" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xmlns:amq="http://activemq.apache.org/schema/core" xmlns:jms="http://www.springframework.org/schema/jms"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd">

 加载配置文件 

    <!--加载配置文件-->
    <context:property-placeholder location="classpath:db2.properties"/>

    <!--注解方式   在配置类上加@PropertySource("classpath:db2.propertes")    -->
    <!--    @PropertySource("classpath:db2.propertes")    用于指定加载配置文件的。-->


(一)   Spring IOC

    <!--01 xml 配置文件-->

    <!--由于dao维护了一个jdbctemplate成员变量,所以需要注入-->
    <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--由于dao维护了一个jdbctemplate成员变量,所以需要注入-->
    <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--  创建一个连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl">
        <property name="jdbcTemplate" ref="jdbctemplate"/>
    </bean>


    <!--02 注解方式-开启注ioc解扫描-->

    <context:component-scan base-package="com.itheima"/>


    <!-- 03 纯注解开发-->

    <!--
        创建一个配置类加上@Configuration注解,代替bean.xml配置文件。

         @Configuration                                该注解的作用代表了该类是一个配置类,用于取代bean.xml文件的。
         @ComponentScan("com.itheima")                  扫描 ioc 相关的注解的 @Respository @Service @Controller	@component这些注解的               															@component这些注解的
         @PropertySource("classpath:db2.propertes")    用于指定加载配置文件的。
         @Bean("dataSource")                           方法上一旦添加 @Bean("dataSource")注解,那么该方法会自动执行,
                                                        并且把该方法的返回值存储到容器中。
    -->

(二) Spring Aop

    <!-- 01 xml 配置-->

    <!--1. 创建目标对象与切面对象-->
    <!--  目标对象  -->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>
    <!--切面对象-->
    <bean id="logAspect" class="com.itheima.service.aspect.LogAspect"/>

    <!--2. 使用aop.config标签把目标对象与切面对象组合到一块形成一个切面。-->
    <aop:config>
        <!--  -->
        <aop:aspect ref="自定义的切面类">
            <!-- 2.1 切入点表达式 : 代表了我需要增强UserServiceImpl的所有方法-->
            <aop:pointcut id="pt" expression="execution(* com.itheima.service.impl.UserServiceImpl.*(..))"/>

            <!--2.2 切面 = 通知+切入点     -->
            <aop:before method="切面类的方法名" pointcut-ref="pt"/>
            <!--前置通知-->
            <aop:before method="before" pointcut-ref="pt"/>
            <!--后置通知-->
            <aop:after-returning method="afterReturn" pointcut-ref="pt"/>
            <!--异常通知-->
            <aop:after-throwing method="agfterException" pointcut-ref="pt"/>
            <!--最终的通知-->
            <aop:after method="afterFinal" pointcut-ref="pt"/>
            <!--配置环绕通知-->
            <aop:around method="around" pointcut-ref="pt"/>
        </aop:aspect>
    </aop:config>


    <!-- 02 注解方式  开启aop的注解扫描   -->
    <!--  切面类上添加注解 @Aspect    方法上 @PointCut(  )  @Before  @After   @AfterReturning  @AfterThrowing   @Around-->
    <aop:aspectj-autoproxy/>


    <!-- 03 纯注解开发-->
    <!--
        创建一个配置类加上@Configuration注解,代替bean.xml配置文件。

         @Configuration                                该注解的作用代表了该类是一个配置类,用于取代bean.xml文件的。
         @EnableAspectJAutoProxy                        扫描aop相关的注解的。(@Aspect ,@PointCut(),@Before,@After,@AfterReturning,@AfterThrowing,@Around)
         @ComponentScan("com.itheima")                  扫描 ioc 相关的注解的 @Respository @Service @Controller	@component这些注解的
         @PropertySource("classpath:db2.propertes")    用于指定加载配置文件的。
         @Bean("dataSource")                           方法上一旦添加 @Bean("dataSource")注解,那么该方法会自动执行,
                                                        并且把该方法的返回值存储到容器中。
    -->

( 三) Spring Aop声明式事务管理

    <!-- 01 xml 配置-->


    <!--由于dao维护了一个jdbctemplate成员变量,所以需要注入-->
    <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl">
        <property name="jdbcTemplate" ref="jdbctemplate"/>
    </bean>

    <!--  创建一个连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--1. 创建目标对象+切面对象-->
    <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
    </bean>


    <!--创建切面对象,spring已经为我们提供好了事务管理器,我们目标是要把事务管理器的代码添加到service方法上面-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>


    <!--2. 事务管理器配置通知的规则:为哪些方法配置事务-->
    <tx:advice id="adive" transaction-manager="transactionManager">
        <tx:attributes>

            <!--  &lt;!&ndash;spring在匹配一个方法事务要事务的时候是从上往下匹配的,只有匹配到其中一个,那么就不会再往下去执行了。&ndash;&gt;
              <tx:method name="find*" propagation="SUPPORTS"/>
              <tx:method name="get*" propagation="SUPPORTS"/>
              <tx:method name="query*" propagation="SUPPORTS"/>
              <tx:method name="select*" propagation="SUPPORTS"/>

              &lt;!&ndash;所有的方法必须要有事务&ndash;&gt;
              <tx:method name="*" propagation="REQUIRED"/>-->

            <!--事务的规则:哪些方法是需要事务管理的。-->
            <tx:method name="save" isolation="DEFAULT" propagation="REQUIRED"/>
            <!--  propagation:事务传播行为,REQUIRED代表了一定要有事务, SUPPORTS代表事务可有可无-->
            <tx:method name="findAll" isolation="DEFAULT" propagation="SUPPORTS"/>
        </tx:attributes>
    </tx:advice>


    <!--3.切面-->
    <aop:config>
        <!--切入点表达式-->
        <aop:pointcut id="pt" expression="execution(* com.itheima.service.impl.AccountServiceImpl.*(..))"/>
        <aop:advisor advice-ref="adive" pointcut-ref="pt"/>
    </aop:config>


    <!-- 02 注解方式  开启事务管理器扫描 @transactional   等同于上面的2 和3   -->
    <!--
        在service层实现类  需要开启事务的类 方法 接口上使用  @Transactional注解

          @Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED,noRollbackFor = NullPointerException.class )  // 事务注解
                    transactionManager: 引用的事务管理器的id
                               默认@Transactional根据类型进行注入
                               如果有多个类型才会按照名称进行注入
                           value: 和transactionManager的值一样的

                           isolation: 设置事务的隔离级别
                           propagation: 设置事务的传播行为
                           rollbackFor: (理论)针对某些异常进行事务回滚  (实际测试,所有异常都可以进行事务控制 )
                           noRollbackFor:  针对某些异常不进行事务回滚 (实际测试是OK的)
    -->
    <!--扫描事务管理器   专门用于扫描@transactional注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>


    <!-- 03 纯注解开发-->

    <!--
          创建一个配置类加上@Configuration注解,代替bean.xml配置文件。

           @ComponentScan("com.itheima")      扫描 ioc 相关的注解的 @Respository @Service @Controller	@component这些注解的
           @Configuration                  该注解的作用代表了该类是一个配置类,用于取代bean.xml文件的。
           @EnableTransactionManagement    //开启事务管理的扫描  扫描@Transactional注解
           @Import(配置类名.class)        // 导入其他的配置类的。
      -->

(四) Spring整合MyBatis配置


    <!--                    Spring整合MyBatis配置(1)创建SqlSessionFactory对象,

        因为每一个dao的代理对象都需要从SqlSession中获取,每一个SqlSession又必须从SqlSessionFactory中产生。
        -->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--A.注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--
        <property name="typeAliasesPackage" value="扫描包,配置别名"/>
        <property name="configLocation" value="配置SqlMapConfig.xml"/>
        <property name="mapperLocations" value="配置加载的映射文件"/>
        -->
        <!--别名扫描-->
        <property name="typeAliasesPackage" value="com.itheima.entity"/>


        <!-- 分页插件 PageHelper  配置-->
        <!-- 注意其他配置 -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置参数,一行配置一个 -->
                        <value>
                            params=value1
                        </value>
                    </property>
                </bean>
            </array>
        </property>

    </bean>


    <!--          Spring整合MyBatis配置(2)创建映射扫描配置

                创建一个Dao对象 进行包扫描, 扫描mybatis
               不再使用 JdbcTemplate 创建Dao实现类,直接使用MyBatis   MapperScannerConfigurer
               Dao 使用注解 或者  Mapper映射文件   创建 Dao实现类

               1.会自动加载映射文件; 2. 也会加载dao方法上注解; 3. 生成代理对象
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--A. 自动加载该路径下的映射文件-->
        <!--B. 自动加载该路径下的dao接口文件(读取方法上的注解)  dao同一个方法,要么通过注解映射要么通过配置Mapper映射-->
        <!--C. 自动对包下的所有接口生成代理对象-->
        <property name="basePackage" value="com.itheima.dao"/>
    </bean>

(五) spring整合shiro配置


    <!--1. 配置shiro的过滤器工厂,  bean的id与web.xml中的配置的shiro过滤器名称一致.-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!--A. 注入Shiro安全管理器-->
        <property name="securityManager" ref="securityManager"/>
        <!--B.注入其他配置-->
        <!--B1.登陆地址. 认证失败后自动跳转到的页面.-->
        <property name="loginUrl" value="/login.jsp"/>
        <!--B2.认证成功后默认跳转的页面. 如果程序由指定会覆盖这里-->
        <property name="successUrl" value="/home.jsp"/>
        <!--B3.权限校验失败,跳转的页面-->
        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>

        <!--C.过滤器链的配置-->
        <!--anon 匿名访问过滤器,指定需要放行的资源-->
        <!--authc 认证过滤器-->
        <property name="filterChainDefinitions">
            <value>
                /css/** = anon
                /img/** = anon
                /make/** = anon
                /plugins/** = anon
                /login.jsp = anon
                /login* = anon
                /index.jsp = anon


                <!-- shiro 授权      需要多个权限   perms=["权限1","权限2"] -->
                <!--/system/user/list.do = perms["用户管理"]  -->


                /** = authc
            </value>
        </property>
    </bean>

    <!--2. 创建安全管理器-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm"/>
    </bean>

    <!--3. 创建自定义的realm对象   自定义realm类:AuthRealm,继承AuthorizingRealm      -->
    <bean id="myRealm" class="cn.itcast.web.shiro.AuthRealm">
        <!--注入凭证匹配器,自动对用户输入的密码按照指定的算法加密-->
        <property name="credentialsMatcher" ref="credentialsMatcher"/>
    </bean>

    <!--4. 创建凭证匹配器,指定加密算法为md5
    <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
        自动对用户输入的密码按照md5加密
        <property name="hashAlgorithmName" value="md5"/>
    </bean>
    -->
    <!--4. 自定义凭证匹配器  自定义类 继承  SimpleCredentialsMatcher类  指定加密算法 -->
    <bean id="credentialsMatcher" class="cn.itcast.web.shiro.CustomCredentialsMatcher"/>


    <!--5. 配置shiro注解支持
                1. 在applicationContext-shiro.xml中开启shiro注解支持
                2. 开启Aop自动代理(已经完成)
                3. 在controller中对应的方法上或类上使用@RequiresPermissions({“权限1”,”权限2“})注解
                depends-on 表示创建当前bean之前,先创建depends-on依赖的对象.控制对象创建顺序         -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
          depends-on="lifecycleBeanPostProcessor"/>
    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>

(六) dubbodemo_provider

    <!--指定服务提供者名称,通常为项目名称。可以随意定义,唯一即可。-->
    <dubbo:application name="dubbodemo_provider"/>

    <!--配置注册中心地址-->
    <dubbo:registry address="zookeeper://192.168.217.128:2181"/>

    <!--
    配置请求协议
           name 指定的是传输协议的名称,
                值列表范围如:dubbo rmi hessian webservice http
           port:服务提供者的真实请求端口
   -->
    <dubbo:protocol name="dubbo" port="20881"/>


    <!--配置dubbo服务提供者的包扫描   @Service(timeout = 100000)  设置超时时间为100秒。默认1秒 import com.alibaba.dubbo.config.annotation.Service  -->
    <dubbo:annotation package="com.itheima.service"/>

    <!--    如果不使用包扫描,也可以通过如下配置的方式来发布服务-->
    <!--    <bean id="helloService" class="com.itheima.service.impl.HelloServiceImpl" />-->
    <!--    <dubbo:service interface="com.itheima.service.HelloService" ref="helloService" />-->

(七) dubbo_consumer

    <!--开启SpringMVC注解扫描,扫描@Controller注解-->
    <context:component-scan base-package="com.itheima.web"/>

    <!--SpringMVC注解驱动-->
    <mvc:annotation-driven/>
    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="dubbodemo_consumer">
        <dubbo:parameter key="qos.enable" value="false"/>
    </dubbo:application>

    <!--配置注册中心地址-->
    <dubbo:registry address="zookeeper://192.168.217.128:2181"/>

    <!-- 默认值为true,表示启动服务消费者时候会检查服务提供者是否有启动,如果服务提供者没有启动消费者启动不了。-->
    <!-- <dubbo:consumer check="false"/>-->


    <!--dubbo开启包扫描  注解扫描(  @Reference(retries = 2)注解  retries = 2调用dubbo服务如果超时,自动重试2次   retries可选填     )-->
    <dubbo:annotation package="com.itheima.web"/>


    <!--    如果不使用包扫描,通过如下配置来引用服务,生成远程服务代理,可以和本地bean一样使用helloService
            此时 controller 中

        @Autowired      // 注意这里用@Autowired,因为是配置的方式创建的接口代理且加入了容器
        private HelloService helloService;
    -->
    <dubbo:reference id="helloService" interface="com.itheima.api.HelloService"/>
    <!--        -->

(八) Spring整合Quartz 定时任务调度 配置


    <!--1. 将自定义的 定时任务类交给spring容器-->
    <bean id="myTask" class="cn.itcast.web.task.MyTask"/>

    <!--2. 创建任务工厂,配置定时执行的类和方法-->
    <bean id="jobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="myTask"/>
        <property name="targetMethod" value="execute"/>
    </bean>

    <!--3. 创建任务调度触发器,注入任务执行表达式   -->
    <bean id="trigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail"/>
        <!--秒 分 小时 日 月 周 年-->
        <property name="cronExpression" value="0/5 * * * * ?"/>
    </bean>

    <!--4. 配置定时任务管理器-->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <array>
                <!--注入任务调度触发器-->
                <ref bean="trigger"/>
            </array>
        </property>
    </bean>

(九) WebService JAX-RS 规范下 Spring整合CXF发布服务

    <!--   <?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:cxf="http://cxf.apache.org/core"
              xmlns:jaxws="http://cxf.apache.org/jaxws"
              xmlns:jaxrs="http://cxf.apache.org/jaxrs"
              xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://cxf.apache.org/core
           http://cxf.apache.org/schemas/core.xsd
           http://cxf.apache.org/jaxws
           http://cxf.apache.org/schemas/jaxws.xsd
           http://cxf.apache.org/jaxrs
           http://cxf.apache.org/schemas/jaxrs.xsd
           ">


           <jaxrs:server address="/userService" serviceClass="cn.itcast.service.UserServiceImpl"/>
       </beans>
       -->

(十) Spring整合 RabbitMQ topic通配符模式


<!--   一       生产者配置  -->
  <!--配置连接-->
  <rabbit:connection-factory
          id="connectionFactory"
          host="192.168.23.1"
          port="5672"
          username="heima"
          password="888"
          virtual-host="/itcast"/>

  <!--配置RabbitAdmin-->
  <rabbit:admin connection-factory="connectionFactory" />

  <!--配置队列名-->
  <rabbit:queue name="myQueue"/>

  <!--配置topic类型exchange;队列绑定到交换机-->
  <rabbit:topic-exchange name="myExchange">
      <rabbit:bindings>
          <rabbit:binding queue="myQueue" pattern="msg.#" />
      </rabbit:bindings>
  </rabbit:topic-exchange>

  <!--配置 RabbitTemplate对象加入容器

                       Map<String,String> map = new HashMap<>();
                       map.put("email","123456789@qq.com");
                       rabbitTemplate.convertAndSend("msg.email",map);  // 发送消息 -->
  <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"
                   exchange="myExchange" message-converter="jsonMessageConverter"/>

  <!-- 消息对象json转换类 -->
  <bean id="jsonMessageConverter"
        class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />



<!--    二   消费者配置  -->
  <!--组件扫描, 扫描自定义的消息监听器  需要添加pom依赖 spring-context    -->
  <context:component-scan base-package="cn.itcast.listener"/>

  <!--配置连接-->
  <rabbit:connection-factory
          id="connectionFactory"
          host="192.168.23.1"
          port="5672"
          username="heima"
          password="888"
          virtual-host="/itcast"/>

  <!--配置RabbitAdmin-->
  <rabbit:admin connection-factory="connectionFactory" />

  <!--配置队列名-->
  <rabbit:queue name="myQueue"/>

  <!--配置监听    emailMessageListener为自定义的消息监听器  实现 MessageListener接口 -->
  <rabbit:listener-container connection-factory="connectionFactory">
      <rabbit:listener ref="emailMessageListener" queue-names="myQueue" />
  </rabbit:listener-container>

(十一) Spring整合 ActiveMQ

    <!--   一   生产者 -->
    <!-- 1. 创建ActiveMQ连接工厂 -->
    <amq:connectionFactory
            id="amqConnectionFactory"
            userName="admin" password="admin"
            brokerURL="tcp://192.168.23.51:61616"/>

    <!-- 2. 创建缓存工厂 -->
    <bean id="cachingConnectionFactory"
          class="org.springframework.jms.connection.CachingConnectionFactory">
        <!-- 注入 连接工厂-->
        <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
        <!-- session缓存数目 -->
        <property name="sessionCacheSize" value="5"></property>
    </bean>

    <!-- 3. 创建JmsTemplate(发送消息的模板工具类对象) -->
    <!-- 3.1发送Queue队列消息 -->
    <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!-- 注入缓存工厂 -->
        <property name="connectionFactory" ref="cachingConnectionFactory"></property>
        <!-- 默认值 -->
        <property name="pubSubDomain" value="false"></property>
    </bean>

    <!-- 3.2发送Topic主题消息 -->
    <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
        <!-- 注入缓存工厂 -->
        <property name="connectionFactory" ref="cachingConnectionFactory"></property>
        <!-- 设置消息模型为主题消息 -->
        <property name="pubSubDomain" value="true"></property>
    </bean>




    <!--      二   消费者 -->
    <!-- 1. 创建ActiveMQ连接工厂 -->
    <amq:connectionFactory
            id="amqConnectionFactory"
            userName="admin" password="admin"
            brokerURL="tcp://192.168.12.132:61616"/>

    <!-- 2. 创建缓存工厂 -->
    <bean id="cachingConnectionFactory"
          class="org.springframework.jms.connection.CachingConnectionFactory">
        <!-- 注入 连接工厂-->
        <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
        <!-- session缓存数目 -->
        <property name="sessionCacheSize" value="5"></property>
    </bean>

    <!--开启注解扫描-->
    <context:component-scan base-package="cn.itcast.spring_activemq_consumer"/>
    <!--
        配置消息监听器类,监听队列或主题消息模型中的消息。从而实现消费消息。
        jms:listener-container
            destination-type 监听的JMS消息类型(queue、topic)
            connection-factory  Spring的缓存连接工厂
        jms:listener
            destination 对应MQ中队列名称或主题名称
            rel          自定义的消息监听器类(实现MessageListener接口)
     -->

    <!-- 3.1 监听指定名称(email)的队列中的消息-->
    <jms:listener-container destination-type="queue" connection-factory="cachingConnectionFactory">
        <jms:listener destination="email" ref="emailMessageListener"/>
    </jms:listener-container>


    <!-- 3.2 监听指定名称(email)的主题中的消息 -->
    <jms:listener-container destination-type="topic" connection-factory="cachingConnectionFactory">
        <jms:listener destination="sms" ref="smsMessageListener"/>
    </jms:listener-container>



</beans>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值