注解Annotation,是一种类似注释的机制,在代码中添加注解可以在之后某时间使用这些信息。跟注释不同的是,注释是给我们看的,Java虚拟机不会编译,注解也是不编译的,但是我们可以通过反射机制去读取注解中的信息。注解使用关键字@interface,继承java.lang.annotition.Annotition

spring框架为我们提供了注解功能。

使用注解编程,主要是为了替代xml文件,使开发更加快速。但是,xml文件的使用就是解决修改程序修改源代码,现在又不去使用xml文件,那么不就违背了开闭原则了么,得确是。不过么,注解也有注解的好,使用注解就不用配置那么多的xml文件啦,最重要的是开发效率高。。

在没有使用注解时,spring框架的配置文件applicationContext.xml文件中需要配置很多的<bean>标签,用来声明类对象。使用注解,则不必在配置文件中添加标签拉,对应的是在对应类的“注释”位置添加说明。具体介绍如下:

spring框架使用的是分层的注解。

持久层:@Repository;

服务层:@Service

控制层:@Controller

1,使用注解,需要在配置文件中增加命名空间和约束文件

  1. <beans ...
  2. xmlns:context="http://www.springframework.org/schema/context"
  3. xsi:schemaLocation="
  4. ...
  5. http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
  6. ">

2,告诉框架那些类是使用注解的。

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

3,持久层注解

  1. Package com.lsz.spring;
  2. @Repository
  3. public class UserDao{
  4. //。。。。
  5. }

@Repository 等同于配置文件中的

  1. <bean id="userDao" class="com.lsz.spring.UserDao" />

4,服务层注解

  1. @Service(value="testService")
  2. public classTestService {
  3. @Resource//相当于自动装配
  4. private UserDao userDao ;
  5. public UserDao getUserDao() {
  6. returnuserDao;
  7. }
  8. public void setUserDao(UserDao userDao) {
  9. this.userDao= userDao;
  10. }
  11. }

@Resource 对象间关系的组合,默认采用的是byName方式进行装配,如果根据名称查找不到关联的对象,那么会再采用byType继续查找。

@Service注解等同与

  1. <bean id="testService" class="com.lsz.spring.UserService" />

5,控制层注解

  1. @Controller(value="ua")
  2. @Scope(value="prototype")
  3. public class UserAction {
  4. @Resource
  5. private UserService userService ;
  6. public UserService getUserService() {
  7. returnuserService;
  8. }
  9. }

@Controller注解等同于

  1. <bean id="ua" class="com.lsz.spring.UserAction " />

这三个层中的注解关键字都可以使用@Component来代替。

使用注解声明对象,默认情况下生成的id名称为类名称的首字母小写。

6,从Spring环境中获取Action对象。

    1. ServletContext application =request.getSession().getServletContext();
    2. ApplicationContextac = WebApplicationContextUtils.getWebApplicationContext(application);
    3. UserAction useraction = (UserAction)ac.getBean("ua");//获取控制层对象
    4. response.setContentType("text/html;charset=GBK");//设置编码
    5. PrintWriter out =response.getWriter();
    6. //分别将三个层的对象打印出来。
    7. out.println("Action:"+userAction);
    8. out.println("Service:"+userAction.getUserService());
    9. out.println("Dao:"+userAction.getUserService().getUserDao());

spring框架学习(五)注解的更多相关文章

  1. spring框架学习(四)——注解方式AOP

    注解配置业务类 使用@Component("s") 注解ProductService 类 package com.how2java.service; import org.spri ...

  2. Spring框架学习之注解配置与AOP思想

         上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...

  3. spring框架学习(二)——注解方式IOC/DI

    什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...

  4. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

  5. 23种设计模式之自定义Spring框架(五)

    7,自定义Spring框架 7.1 spring使用回顾 自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟. 数据访问层.定义UserDao ...

  6. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  7. Spring框架学习之IOC(二)

    Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...

  8. Spring框架学习笔记(5)——Spring Boot创建与使用

    Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...

  9. Spring框架学习总结(上)

    目录 1.Spring的概述 2.Spring的入门(IOC) 3.Spring的工厂类 4.Spring的配置 5.Spring的属性注入 6.Spring的分模块开发的配置 @ 1.Spring的 ...

  10. Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建

    之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...

随机推荐

  1. final阶段团队贡献分分配

    小组名称:nice! 小组成员:李权 于淼 刘芳芳 韩媛媛 宫丽君 项目内容:约跑app 代码git的地址:https://git.coding.net/muziliquan/niceGroup.gi ...

  2. Web 播放声音 — Flash 篇 (播放 AMR、WAV)

    本文主要介绍 Flash 播放 AMR 格式 Base64码 音频. 在此之前么有接触过 Flash ,接触 AS3 是一头雾水,不过幸好有 TypeScript 和 JavaScript 的基础看起 ...

  3. rabbimq连接问题处理

    今天遇到一个rabbitmq的连接问题,之前自己写代码测试的时候并没有出现过,所以做个小总结,由于是其他项目测试部署环境发现的问题,所以一开始排查还是有点坑... 客户端上新建一个rabbitmq的c ...

  4. Weblogic的架构

    WebLogic管理控制台  WebLogic服务器提供了一个健壮的基于Web 的工具——管理控制台,它是执行上述任务的主要工具.通过管理控制台,你可以访问WebLogic管理服务.管理服务实现了 S ...

  5. java树形目录展示

    package test; import java.awt.Component;import java.awt.Container;import java.util.ArrayList;import ...

  6. 【转】Eclipse快捷键 10个最有用的快捷键

    转载地址:http://www.open-open.com/bbs/view/1320934157953 Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但 ...

  7. 使用maven搭建SpringMVC项目环境

    Window环境下用maven新建一个项目: mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=cn-cisol -Dartif ...

  8. Java 枚举类

    如果要定义一个枚举类: public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE}; 实际上,这个声明定义的类型是一个类,它刚好有4个实例 ...

  9. AndroidManifest.xml详解(下)

    本文编辑整理自:http://blog.163.com/hero_213/blog/static/39891214201242835410742/ 八.第三层<activity-alias> ...

  10. javascript作用域链与原型链有联系吗?

    一般来说,作用域链是针对变量的,js里面大的范围上来说,只有两种作用域,全局作用域和函数内部作用域,如果函数1里面又定义了函数2(一般都是匿名函数), 那么就有了这么一个作用域链全局作用域==> ...