zoukankan      html  css  js  c++  java
  • Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)

    注解:代码里面特殊的标记,使用注解可以完成相关功能

    注解写法:@注解名称(属性名、属性值)

    @Required

    用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就是说必须对这个值进行依赖注入。

    编写Student.java

     1 package com.example.spring;
     2 import org.springframework.beans.factory.annotation.Required;
     3 
     4 public class Student {
     5     private String name;
     6 
     7     @Required
     8     public void setName(String name){
     9         this.name = name;
    10     }
    11 
    12     public void print(){
    13         System.out.println("name:"+name);
    14     }
    15 }

    编写Beans.xml

     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:context="http://www.springframework.org/schema/context"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans
     6     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     7     http://www.springframework.org/schema/context
     8     http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     9 
    10     <context:annotation-config/>
    11 
    12     <bean id="student" class="com.example.spring.Student" >
    13         <property name="name" value="XiaoMing"></property>
    14     </bean>
    15 
    16 </beans>

    编写Application.java

     1 package com.example.spring;
     2 
     3 import org.springframework.context.support.AbstractApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Application {
     7     public static void main(String[] args) {
     8         //bean配置文件所在位置 D:\IdeaProjects\spring\src\Beans.xml
     9         //使用AbstractApplicationContext容器
    10         AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\IdeaProjects\spring\src\Beans.xml");
    11         //得到配置创建的对象
    12         Student student = (Student) context.getBean("student");
    13         student.print();
    14     }
    15 }

    创建对象的注解有四个注解

    1. @Component :对那些比较中立的类进行注释
    2. @Controller :WEB层
    3. @Service  :业务层
    4. @Repository  :持久层

    @Component

    在类定义上面使用,表示用注解方式创建对象,相当于在配置文件中,<bean id="" class="">

    编写User.java

     1 package com.example.spring;
     2 
     3 import org.springframework.stereotype.Component;
     4 
     5 @Component(value = "user") //相当于beans.xml中的<bean id="user" class="com.example.spring.User">
     6 public class User {
     7     public void print(){
     8         System.out.println("user pirnt.");
     9     }
    10 }

    编写Beans.xml

     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:context="http://www.springframework.org/schema/context"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans
     6     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     7     http://www.springframework.org/schema/context
     8     http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     9 
    10     <!--开启注解扫描,到包里面扫描类、方法、属性上面是否有注解-->
    11     <context:component-scan base-package="com.example.spring"></context:component-scan>
    12 
    13 </beans>

     编写Application.java

     1 package com.example.spring;
     2 
     3 import org.springframework.context.support.AbstractApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Application {
     7     public static void main(String[] args) {
     8         //bean配置文件所在位置 D:\IdeaProjects\spring\src\Beans.xml
     9         //使用AbstractApplicationContext容器
    10         AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\IdeaProjects\spring\src\Beans.xml");
    11         //得到配置创建的对象
    12         User user = (User) context.getBean("user");
    13         user.print();
    14     }
    15 }

    运行输出

    user pirnt.

    其他的注解创建对象方式类似 

    注入对象属性的注解:

    1. @Autowired
    2. @Resource

    @Autowired

    对象类型属性注入注解

    编写UserDao.java

     1 package com.example.spring;
     2 
     3 import org.springframework.stereotype.Component;
     4 
     5 //@Component 创建对象注释,相当于在配置文件中中的<bean id="userDao" class="com.example.spring.UserDao">
     6 @Component(value = "userDao")
     7 public class UserDao {
     8     public void print(){
     9         System.out.println("Dao print.");
    10     }
    11 }

    编写UserService.java

     1 package com.example.spring;
     2 
     3 import org.springframework.beans.factory.annotation.Autowired;
     4 import org.springframework.stereotype.Component;
     5 
     6 //@Component 创建对象注释,相当于在配置文件中中的<bean id="userService" class="com.example.spring.UserService">
     7 @Component(value = "userService")
     8 public class UserService {
     9     //1、定义dao类型属性,在dao属性上面使用注解,完成对象注入
    10     //@Autowired 相当于配置文件中的对象类型注入(如下)
    11     //  <bean id="userDao" class="com.example.spring.UserDao"></bean>
    12     //  <bean id="userService" class="com.example.spring.UserService" >
    13     //      <property name="userDao" ref="userDao"></property>
    14     //  </bean>
    15     @Autowired
    16     private UserDao userDao;
    17     //2、使用注解方式时候不需要set方法
    18     //public void setUserDao(UserDao userDao){
    19     //    this.userDao = userDao;
    20     //}
    21 
    22     public void print(){
    23         System.out.println("Service print.");
    24         userDao.print();
    25     }
    26 }

    编写Beans.xml

     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:context="http://www.springframework.org/schema/context"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans
     6     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     7     http://www.springframework.org/schema/context
     8     http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     9 
    10     <!--开启注解扫描,到包里面扫描类、方法、属性上面是否有注解-->
    11     <context:component-scan base-package="com.example.spring"></context:component-scan>
    12 
    13 
    14 </beans>

    编写Application.java

     1 package com.example.spring;
     2 
     3 import org.springframework.context.support.AbstractApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Application {
     7     public static void main(String[] args) {
     8         //bean配置文件所在位置 D:\IdeaProjects\spring\src\Beans.xml
     9         //使用AbstractApplicationContext容器
    10         AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\IdeaProjects\spring\src\Beans.xml");
    11         //得到配置创建的对象
    12         UserService user = (UserService) context.getBean("userService");
    13         user.print();
    14     }
    15 }

    运行输出

    Service print.
    Dao print.

    @Resource

    @Autowired是通过类名来自动注入,和@Component(value = "userDao")中的value值无关,这时就引出了@Resource注解,@Resource(name="userDao"),就会查找@Component(value = "userDao")注解的类并注入。

  • 相关阅读:
    spring给容器中注入组件的几种方式
    Linux多进程
    Linux多进程的应用
    Linux进程通信
    Linux信号
    Linux共享内存
    Linux信号量
    Linux多线程
    Linux线程同步
    Linux调用可执行程序
  • 原文地址:https://www.cnblogs.com/zylq-blog/p/7800054.html
Copyright © 2011-2022 走看看