利用注解重构前面几个例子

前面我们用了document 和Mvc这两个例子,现在我们使用注解来重构一下:

document:

//document类
@Component("document")
public interface Document {
    public void read();
    public void write();
}

//管理类
@Component("documentManager")
public class DocumentManager {
    //利用resource给属性赋值
    @Resource(name="wordDocument")
    private Document document;

    public void read(){
        document.read();
    }
    public void write(){
        document.write();
    }
}

//excel类:
@Component("excelDocument")
public class ExcelDocument implements Document {

    @Override
    public void read() {
        System.out.println("excelRead");
    }

    @Override
    public void write() {
        System.out.println("excelWrite");

    }

}


//pdf类:

@Component("pdfDocument")
public class PDFDocument implements Document {

    @Override
    public void read() {
        System.out.println("pdfRead");
    }

    @Override
    public void write() {
        System.out.println("pdfWrite");

    }

}


//word类:
@Component("wordDocument")
public class WordDocument implements Document {

    @Override
    public void read() {
        System.out.println("wordRead");
    }

    @Override
    public void write() {
        System.out.println("wordWrite");

    }

}

//配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    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
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <!--
        注册扫描类
    -->
    <context:component-scan base-package="cn.ansel.annotation_document"></context:component-scan>           

</beans>


//测试类:
public class testAnnotationDocument {
    @Test
    public void testAnnotationDocument(){
        //启动spring容器,
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("cn/ansel/annotation_document/applicationContext-annotation-document.xml");
        //得到管理类的对象
        DocumentManager documentManager=(DocumentManager) applicationContext.getBean("documentManager");
        //调用其中的方法
        documentManager.read();
        documentManager.write();
    }
}

关于具体的思路,我在前面的帖子中说过了,就不做详细说明。
运行结果:
这里写图片描述

document小结:

从上面的代码还有配置文件中我们可以看到,在类里面没有了getter&setter方法,也没有在配置文件中把类放到spring容器上,包括给属性的赋值,我们也是使用注解,可以看到代码量确实下来了。

重构Mvc例子:

我们的 Mvc例子只是一个超级简易的Mvc例子。
spring的注解为我们更加详细的 提供了关于Mvc的注解,大家可以看spring的帮助文档:
这里写图片描述
所以,在这里我们可以应用上:@Controller、@Service、@Repository。


下面是代码:

//控制层
@Controller("studentAction")
public class StudentAction {
    //调用service层
    @Resource(name="studentServiceImpl")
    private StudentService service;

    public void saveStudent(){
        service.saveStudent();
    }
}

//逻辑业务层实现层
@Service("studentServiceImpl")
public class StudentServiceImpl implements StudentService {
    @Resource(name="studentDAOImpl")
    private StudentDAO dao;

    @Override
    public void saveStudent() {
        dao.saveStudent();
    }

}

//dao层实现层
@Repository("studentDAOImpl")
public class StudentDAOImpl implements StudentDAO {

    @Override
    public void saveStudent() {
        System.out.println("save student dao");
    }

}

//配置文件:
   <context:component-scan base-package="cn.ansel.annotation.mvc"></context:component-scan>

测试类:

public class testAnnotationMVC {
    @Test
    public void testAnnotation_MVC(){
        //启动spring容器
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("cn/ansel/annotation/mvc/applicationContext-annotation-MVC.xml");
        //得到控制层对象
        StudentAction action=(StudentAction) applicationContext.getBean("studentAction");
        //操作
        action.saveStudent();
    }
}

运行结果:
这里写图片描述

mvc小结:

比起之前一直使用上层调用下层用new对象,然后把类放到spring容器中使用xml配置文件,使用注解的方式确实方便了很多,感觉我们做了很少,但是spring容器为我们完成了很多工作。

总结:

到目前为止,已经学习到了5个注解:
其中为属性赋值的注解为:
@Resource
@Autowired
@Qualifier

把类加载到spring容器的注解为:
@Component(通用形式)
@Controller(控制层/表现层)
@Service(逻辑业务层)
@Repository(持久化层)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值