zoukankan      html  css  js  c++  java
  • 使用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框架代码编写,对实例和类直接用注解注入。

     

  • 相关阅读:
    Java高级之类结构的认识
    14.8.9 Clustered and Secondary Indexes
    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器
    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构
    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
    14.8.1 Creating InnoDB Tables 创建InnoDB 表
    14.7.4 InnoDB File-Per-Table Tablespaces
    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB
  • 原文地址:https://www.cnblogs.com/liguanxing/p/5968306.html
Copyright © 2011-2022 走看看