注解:代码中的特殊标记,注解可以使用在类、方法、属性上面,使用注解可实现一些基本的功能。注解的写法是@注解名称(属性=属性值)

使用注解创建对象

第一步,创建Web项目,引入Spring的开发包 
第二步,编写相关的类

在src目录下创建一个cn.itcast.anno包,并在该包下编写一个User类。

public class User {

    public void add() {
System.out.println("add....................");
} }

第三步,创建Spring配置文件

  • 在Spring配置文件中引入约束,如下:
<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"
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">
  • 在Spring配置文件中做些事情,即开启注解扫描。

    <!-- 开启注解的扫描。到配置的包里面扫描类、方法、属性上面是否有注解 -->
    <context:component-scan base-package="cn.itcast"></context:component-scan>

    注意:也可以这样开启注解扫描,如下:

    <context:annotation-config></context:annotation-config>

    但是这种开启注解扫描的方式,只会扫描属性上面的注解。实际开发中用到的并不多!故不推荐使用。

第四步,在创建对象所在的类上面使用注解实现

@Component(value="user") // 类似于<bean id="user" class="..." />
public class User { public void add() {
System.out.println("add....................");
} }

如若注解里面属性名称是value,则可以省略,所以上面的User类亦可这样写为:

@Component("user") // 类似于<bean id="user" class="..." />
public class User { public void add() {
System.out.println("add....................");
} }

第五步,编写测试类 
在cn.itcast.anno包下编写一个TestDemo单元测试类。

public class TestDemo {

    @Test
public void testUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
User user = (User) context.getBean("user");
System.out.println(user);
user.add();
} }

Spring的bean管理中常用的注解

创建对象的注解有四个:

  1. @Component:作用在类上
  2. @Repository:用于对DAO实现类进行标注(持久层)。
  3. @Service:用于对Service实现类进行标注(业务层)。
  4. @Controller:用于对Controller实现类进行标注(WEB层)。

后三个注解是Spring中提供的@Component的三个衍生注解(功能目前来讲是一样的),它们是为了让标注类本身的用途更清晰,Spring在后续的版本中会对其进行增强。

bean的作用范围的注解

@Scope

  • singleton:单例,默认值
  • prototype:多例

所以我们可通过注解设置创建对象是单例或者还是多实例的。这样User类的代码亦可写为:

@Service("user")
@Scope("singleton")
public class User { public void add() {
System.out.println("add....................");
} }

使用注解注入属性(对象)

这儿,我举个例子来说明如何使用注解注入(对象类型的)属性。 
先创建业务层中的UserService类:

public class UserService {
public void add() {
System.out.println("service...........");
}
}

再创建持久层中的UserDao类:

public class UserDao {
public void add() {
System.out.println("dao................");
}
}

以上两个类都创建在cn.itcast.anno包中。我们要实现的目的是在UserService类里面调用UserDao类的方法,这样我们就要在UserService类里面得到UserDao类的对象。之前是采用xml配置文件的方式来注入属性的,本文将使用注解的方式完成注入属性的操作。

  1. 在UserService类里面定义UserDao类型属性

    private UserDao userDao;

    在UserService类里面定义UserDao类型的属性,由于是使用注解的方式,故不需要手动生成set方法。

  2. 进行注解方式实现属性注入
    1. 创建UserDao类的对象和UserService类的对象

      @Service("userService")
      public class UserService { private UserDao userDao; public void add() {
      System.out.println("service...........");
      userDao.add();
      } }
      @Repository("userDao")
      public class UserDao { public void add() {
      System.out.println("dao................");
      }
      }
    2. 在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用@Autowired注解来实现。
      @Service("userService")
      public class UserService { @Autowired
      private UserDao userDao; public void add() {
      System.out.println("service...........");
      userDao.add();
      } }

      注意:使用注解@Autowired,它不是根据名字去找Dao,而是默认按类型进行装配。 
      当然了,也可使用@Resource注解来实现,如下:

      @Service("userService")
      public class UserService { @Resource(name="userDao")
      private UserDao userDao; public void add() {
      System.out.println("service...........");
      userDao.add();
      } }

      注意,使用@Resource注解,它默认是按名称进行注入的。在实际开发中,我们也是使用@Resource注解来注入属性的,注解@Autowired用到的并不多。

Spring的bean管理(注解方式)的更多相关文章

  1. Spring之Bean管理------注解方式

    编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...

  2. IoC容器-Bean管理注解方式(创建对象)

    IoC操作Bean管理(基于注解方式) 1,什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...) (2)使用注解,注解作用在类上面,方法上面,属性上面 ( ...

  3. IoC容器-Bean管理注解方式(注入属性@Autowired和Qualifier)

    基于注解方式实现属性注入 (1)@Autowired:根据属性类型进行自动装配 第一步 把 service 和 dao 对象创建,在service 和 dao 类添加创建对象注解 第二步 在servi ...

  4. IoC容器-Bean管理注解方式(完全注解开发)

    完全注解开发 (1)创建配置类,替代xml配置文件 (2)编写测试类 在实际中一般用springboot做

  5. IoC容器-Bean管理注解方式(组件扫描配置)

    4,开启组件扫描细节配置

  6. Spring 的Bean管理的常用注解

    属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配  按名称注入 @Qualifier 强制使用名称注入 ...

  7. 面试阿里,字节,美团必看的Spring的Bean管理详解

    IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...

  8. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  9. Spring 的 Bean 管理(注解方式)

    Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...

随机推荐

  1. windows下查看特定端口被什么程序占用

    我电脑上因为命令: netstat -ano 列出的太多了,所以不好看. 以下是其他方式: 查看8088端口占用情况: 开始---->运行---->cmd,或者是window+R组合键,调 ...

  2. doctest --- 一个改善python代码质量的工具

    [简介] 说实话吧,之前一直没有怎么重视给自己的代码加上测试逻辑:也就是说我只是写了代码,但是并没有给自己的代码加上测试代码: 整个过程就是写完后自己测试一下,看一下跑出来的结果是正确的就心满意足了. ...

  3. atitit 如何才能保持基业长青,建立万年企业v2 q66.docx

    1. 价值观 1 2. 分权 民主化 扁平化管理 1 3. 剥离经济部门,,降低经济的重要性 .超越利润的追求 1 4. 构建愿景 1 5. 强大的团队文化 企业文化 宗教文化 .教派般的文化 1 1 ...

  4. AOSP中的HLS协议解析

    [时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, AOSP, 源码分析,HttpLiveSource, LiveSession,PlaylistFetcher] ...

  5. iOS 开发网络篇—监测网络状态

    iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行 ...

  6. jQuery雷达扫描切换幻灯片代码

    基于jQuery雷达扫描切换幻灯片代码.这是一款切换效果类似雷达扫描,支持鼠标滚轮滚动切换.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=" ...

  7. 【资料下载区】【iCore系列及其它模块相关文档】更新日期2017/07/24

    iCore系列双核心板原理图下载区 iCore双核心板原理图下载(注释版)iCore1s双核心板原理图下载iCore2双核心板原理图下载iCore3双核心板原理图下载iCore4双核心板原理图下载 i ...

  8. chrome 下 input[file] 元素cursor设置pointer不生效的解决

    https://jingyan.baidu.com/article/48b558e32fabb67f38c09a81.html 环境是chrome浏览器,今天发现为html网页中的input [fil ...

  9. Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用get()方法表示即可 ...

  10. Kubernetes集群部署之四Master节点部署

    Kubernetes Master节点部署三个服务:kube-apiserver.kube-controller-manager.kube-scheduler和一个命令工具kubectl. Maste ...