• 使用Spring注解来简化ssh框架的代码编写


     目的:主要是通过使用Spring注解的方式来简化ssh框架的代码编写。

    首先:我们浏览一下原始的applicationContext.xml文件中的部分配置。

        <bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype">
            <property name="is" ref="myIndexService"></property>
        </bean>
        
        <bean id="myIndexService" class="ssh.service.IndexServiceImpl" scope="prototype">
            <property name="id" ref="myIndexDao"></property>
        </bean>
        
        <bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype">
            <property name="sf" ref="mySessionFactory"></property>
        </bean>

    :从上面的代码段中可以看出,action控制层访问的是service业务层,而service业务层则是访问dao数据层。
          每个类有什么属性要注入都显得非常明显,所以本例要做的就是把applicationContext.xml配置文件进行简化。

    接着:我们把applicationContext.xml文件中代码简化成如下代码:

      <bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype"></bean>
    <bean id="myIndexService"class="ssh.service.IndexServiceImpl" scope="prototype"></bean>
    <bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype"></bean>

    :在这里只是绑定了每个bean,并没有为其注入属性。其实是用到了Spring的@Autowired和@Qualifier这两个注解。 

       //属性的注解 
    @Autowired @Qualifier(
    "mySessionFactory") private SessionFactory sf;

    :在Qualifier注解中我们申明其引用的是哪一个bean,Spring 便会自动为其注入这个实例,并且可以省略属性的set方法。

    <?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:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" 
    
    xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jee="http://www.springframework.org/schema/jee" 
    
    xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="    
                http://www.springframework.org/schema/aop 
    
    http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
                http://www.springframework.org/schema/beans 
    
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
                http://www.springframework.org/schema/context 
    
    http://www.springframework.org/schema/context/spring-context-4.2.xsd
                http://www.springframework.org/schema/jee 
    
    http://www.springframework.org/schema/jee/spring-jee-4.2.xsd  
                http://www.springframework.org/schema/tx 
    
    http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
    
        <!-- 基于ssh这个包自动扫描其中的类 ,也会自动注入解析器-->
        <context:component-scan base-package="ssh"></context:component-scan>
    
        <!-- 引入外部属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties" />
    
        <bean id="mySessionFactory"
            class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        </bean>
    
        <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            
        </bean>
            
    </beans>

     :从上面的applicationContext.xml文件中的代码我们可以看到配置文件没有对Java bean 进行相关配置, 但多了一行代码:

     <context:component-scan base—package="ssh"></context:component-scan>,通过这个节点的base-package属性可以配置Spring需要自动注入的哪个基包。

    接下来:我们使用spring注解来对类进行注解: @Controller action层 、  @Service service层 、  @Repository dao层;

    //action类的类注解
    @Controller("myIndexAction") @Scope("prototype") public class IndexAction extends ActionSupport {
      //使用spring内置注解@Autowired自动注入实例
    @Autowired
    //@Qualifier(
    "myIndexService")
    private IndexService is;
    //Service类的类注解
    @Service("myIndexService") @Scope("prototype") public class IndexServiceImpl implements IndexService {
      //使用spring内置注解@Autowired自动注入实例
    @Autowired
    //@Qualifier("myIndexDao")
    private IndexDao id;
    //dao类的类注解
    @Repository("myIndexDao") @Scope("prototype") public class IndexDaoImpl implements IndexDao {
      //使用spring内置注解@Autowired自动注入实例
    @Autowired
    //@Qualifier("mySessionFactory")
    private SessionFactory sf;

    :@Controller("myIndexAction")相当于applicationContext.xml配置文件中的bean节点 ,而括号中的值相当于bean节点中的id属性值。则注解 @Scope("prototype")

          相当于applicationContext.xml文件中bean节点中scope属性,这个非单例 模式注解十分重要,主要起到线程安全,防止并发操作时出现异常的作用。


    :其实除了Spring注解,还有JDK注解@Resource配置属性;说明见如下截图:

    总结:本例通过使用Spring注解的方式简化了ssh框架代码编写,对实例和类直接用注解注入。

     

  • 相关阅读:
    luoguP3806 【模板】点分治1
    BZOJ 4176: Lucas的数论 莫比乌斯反演 + 杜教筛
    BZOJ 3994: [SDOI2015]约数个数和 莫比乌斯反演
    CF1037H Security 后缀自动机 + right集合线段树合并 + 贪心
    BZOJ 2226: [Spoj 5971] LCMSum 莫比乌斯反演 + 严重卡常
    BZOJ 4408: [Fjoi 2016]神秘数 主席树 + 神题
    BZOJ 4804: 欧拉心算 欧拉函数
    BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
    html基础总结
    对于房天下租房信息进行爬取
  • 原文地址:https://www.cnblogs.com/liguanxing/p/5968306.html
Copyright © 2020-2023  润新知