zoukankan      html  css  js  c++  java
  • Spring学习笔记3——使用注解的方式完成注入对象中的效果

    第一步:修改applicationContext.xml

    添加<context:annotation-config/>表示告诉Spring要用注解的方式进行配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xmlns:context="http://www.springframework.org/schema/context"
     7     xsi:schemaLocation="
     8    http://www.springframework.org/schema/beans
     9    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    10    http://www.springframework.org/schema/aop
    11    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    12    http://www.springframework.org/schema/tx
    13    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    14    http://www.springframework.org/schema/context     
    15    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    16 
    17   <context:annotation-config/>
    18     <bean name="category" class="com.spring.cate.Category">
    19         <property name="name" value="category 3333" />
    20     </bean>
    21     <bean name="product" class="com.spring.cate.Product">
    22         <property name="name" value="product 3333" />
    23     </bean>
    24 
    25 </beans>

    第二步:在Product.java的category属性前加上@Autowired注解

     1 package com.spring.cate;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 
     5 
     6 public class Product {
     7     private int id;
     8     private String name;
     9     @Autowired
    10     private Category category;
    11 
    12     public int getId() {
    13         return id;
    14     }
    15 
    16     public void setId(int id) {
    17         this.id = id;
    18     }
    19 
    20     public String getName() {
    21         return name;
    22     }
    23 
    24     public void setName(String name) {
    25         this.name = name;
    26     }
    27 
    28     public Category getCategory() {
    29         return category;
    30     }
    31 
    32     public void setCategory(Category category) {
    33         this.category = category;
    34     }
    35 }

    第三步:测试

     1 package com.spring.test;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 import com.spring.cate.Product;
     7 
     8 public class TestSpring {
     9 
    10     public static void main(String[] args) {
    11         // TODO Auto-generated method stub
    12         ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
    13         Product p = (Product) context.getBean("product");
    14         System.out.println(p.getName());
    15         System.out.println(p.getCategory().getName());
    16     }
    17 
    18 }

    第四步:除了前面的在属性前加@Autowired这种方式外,也可以在setCategory方法前加上@Autowired,这样来达到相同的效果

    第五步:除了@Autowired之外,@Resource也是常用的手段

     1 package com.spring.cate;
     2 
     3 import javax.annotation.Resource;
     4 
     5 //@Component("product")
     6 public class Product {
     7     private int id;
     8     // private String name = "product1";
     9     private String name;
    10     @Resource(name = "category")
    11     private Category category;
    12 
    13     public int getId() {
    14         return id;
    15     }
    16 
    17     public void setId(int id) {
    18         this.id = id;
    19     }
    20 
    21     public String getName() {
    22         return name;
    23     }
    24 
    25     public void setName(String name) {
    26         this.name = name;
    27     }
    28 
    29     public Category getCategory() {
    30         return category;
    31     }
    32 
    33     public void setCategory(Category category) {
    34         this.category = category;
    35     }
    36 }

    第六步:对Bean的注解

    上述例子是对注入对象行为的注解,那么bean对象本身,比如Category,Product可不可以移出applicationContext.xml配置文件,也通过注解进行呢?
    接下来就讲解如何对Bean进行注解配置

    第七步:修改applicationContext.xml

    修改applicationContext.xml,什么都去掉,只新增: <context:component-scan base-package="com.spring.cate"/>

    其作用是告诉Spring,bean都放在com.spring.cate这个包下

    第八步:@Component

    为Product类加上@Component注解,即表明此类是bean

    为Category 类加上@Component注解,即表明此类是bean

    另外,因为配置从applicationContext.xml中移出来了,所以属性初始化放在属性声明上进行了。

    Product.java

     1 package com.spring.cate;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Component;
     5 
     6 @Component("product")
     7 public class Product {
     8     private int id;
     9     private String name = "product1";
    10     @Autowired
    11     private Category category;
    12 
    13     public int getId() {
    14         return id;
    15     }
    16 
    17     public void setId(int id) {
    18         this.id = id;
    19     }
    20 
    21     public String getName() {
    22         return name;
    23     }
    24 
    25     public void setName(String name) {
    26         this.name = name;
    27     }
    28 
    29     public Category getCategory() {
    30         return category;
    31     }
    32 
    33     public void setCategory(Category category) {
    34         this.category = category;
    35     }
    36 }

    Category.java

     1 package com.spring.cate;
     2 
     3 import org.springframework.stereotype.Component;
     4 
     5 @Component("category")
     6 public class Category {
     7     private int id;
     8     private String name = "category1";
     9 
    10     public int getId() {
    11         return id;
    12     }
    13 
    14     public void setId(int id) {
    15         this.id = id;
    16     }
    17 
    18     public String getName() {
    19         return name;
    20     }
    21 
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25 }

    结果:

  • 相关阅读:
    1033 To Fill or Not to Fill (25分)(贪心)
    CentOS(五)--Linux系统的分区概念
    Linux安装Oracle 11G过程(测试未写完)
    【VMware虚拟化解决方案】设计和配置VMware vCenter 5.5
    CentOS(四)--Linux系统的启动级别
    CentOS(三)--初识linux的文件系统以及用户组等概念
    CentOS(二)--初识linux的一些常用命令
    CentOS(一)--CentOS6.4环境搭建
    Linux c/c++图片传输功能(中级版)
    remote uptime 服务器程序
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/8832659.html
Copyright © 2011-2022 走看看