zoukankan      html  css  js  c++  java
  • SpringFramework|@Autowired

    @Autowried的使用

    前述

    Java: 1.8

    Maven: 3

    SpringFramework版本以及各组件成员: 5.1.1.RELEASE

    • spring-context
    • spring-core
    • spring-beans

    @Autowired 注释对在哪里和如何完成自动连接提供了更多的细微的控制。

    • 在属性上 - 省略setter
    • 在setter方法上 - 实现byName装配
    • 在构造函数上 - 应用于构造注入

    以及@Autowired(required=false), 这表明依赖是非必要的. (默认必要)

    在属性上的@Autowried(以省略setter)

    你可以在属性中使用 @Autowired 注释来除去 setter 方法。当时使用 为自动连接属性传递的时候,Spring 会将这些传递过来的值或者引用自动分配给那些属性。

    Bean.java (并不是严格意义上的JavaBean):

    package noioo;
    
    public class Bean {
    
        public void sayHelloWorld(){
            System.out.println("Hello World");
        }
    }
    

    BeanUser.java(Bean的使用者):

    package noioo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    public class BeanUser {
    
        @Autowired
        private Bean bean;
    
    
        public Bean getBean() {
            return bean;
        }
    
        public void useBean(){
            bean.sayHelloWorld();
        }
    }
    

    spring-beans.xml (配置文件)

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    
        <context:annotation-config/>
    
        <bean id="beanUser" class="noioo.BeanUser">
        </bean>
    
        <bean id="bean" class="noioo.Bean">
        </bean>
    </beans>
    

    Runner.java - 执行者

    package noioo;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Runner {
    
        public static void main(String[] args){
            ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
            BeanUser beanUser = (BeanUser)context.getBean("beanUser");
            beanUser.useBean();
        }
    }
    

    执行结果

    Hello World
    
    Process finished with exit code 0
    

    在Setter方法上的@Autowired(实现byName)

    你可以在 XML 文件中的 setter 方法中使用 @Autowired 注释来除去 元素。当 Spring遇到一个在 setter 方法中使用的 @Autowired 注释,它会在方法中视图执行 byType 自动连接。

    ❗不修改上面示例中的内容有:

    • Bean.java
    • spring-beans.xml
    • MainRunner.java

    BeanUser.java修改如下:

    package noioo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    public class BeanUser {
    
    
        private Bean bean;
    
        @Autowired // [相当于byName]将在配置文件中查找名为bean的SpringBean来进行注入.
        public void setBean(Bean bean) {
            this.bean = bean;
        }
    
        public Bean getBean() {
            return bean;
        }
    
        public void useBean(){
            bean.sayHelloWorld();
        }
    }
    

    执行结果

    Hello World
    
    Process finished with exit code 0
    

    构造函数上的@Autowired(构造注入)

    你也可以在构造函数中使用 @Autowired。一个构造函数 @Autowired 说明当创建 bean 时,即使在 XML 文件中没有使用 元素配置 bean ,构造函数也会被自动连接。

    ❗不修改上面示例中的内容有:

    • Bean.java
    • spring-beans.xml
    • MainRunner.java

    BeanUser.java修改为构造注入并添加@Autowired:

    package noioo;
    
            import org.springframework.beans.factory.annotation.Autowired;
    
    public class BeanUser {
    
    
        private Bean bean;
    
        @Autowired
        public BeanUser(Bean bean){
            this.bean = bean;
        }
    
    
        public Bean getBean() {
            return bean;
        }
    
        public void useBean(){
            bean.sayHelloWorld();
        }
    }
    

    执行结果

    Hello World
    
    Process finished with exit code 0
    
  • 相关阅读:
    15. DML, DDL, LOGON 触发器
    5. 跟踪标记 (Trace Flag) 834, 845 对内存页行为的影响
    4. 跟踪标记 (Trace Flag) 610 对索引组织表(IOT)最小化日志
    14. 类似正则表达式的字符处理问题
    01. SELECT显示和PRINT打印超长的字符
    3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
    2. 跟踪标记 (Trace Flag) 3604, 3605 输出DBCC命令结果
    1. 跟踪标记 (Trace Flag) 1117, 1118 文件增长及空间分配方式
    0. 跟踪标记 (Trace Flag) 简介
    SpringBoot + Redis + Shiro 实现权限管理(转)
  • 原文地址:https://www.cnblogs.com/shwo/p/9863633.html
Copyright © 2011-2022 走看看