Spring IoC之DI实现注解配置形式

Spring Annotaiton Config Bean

Spring.io:annotaition
Spring IoC之DI实现XML配置形式]

如何注解的方式IoC

扫描注解: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:component-scan base-package="com.test.springdome02"></context:component-scan>
    <bean id="user" class="com.test.springdome02.pojo.User">
                <property name="uid" value="100"></property>
                <property name="uname" value="小张"></property>
        </bean>
</beans>
import org.springframework.stereotype.Component;
@Component
public class User {
    private String uid;
    private String uname;
    public void setUid(String uid) {
        this.uid = uid;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", uname='" + uname + '\'' +
                '}';
    }
}

测试方法

public class Test01 {
    private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationcontext.xml");
        @Test
        public void test00(){
            System.out.println(ac.getBean("user", User.class));
        }	
}

在这里插入图片描述

注解的方式将注入bean
Component、Service、Repository、Controller

这四个注解的含义相同,被标注的类会被spring注入进spring容器中

//以Component为例
@Component
public class User{
    @Override
    public String toString() {
        return "this is User";
    }
}

测试代码

System.out.println(ac.getBean("user", User.class));

在这里插入图片描述

四个注解的区别
  • Controller一般用于控制层类上
  • service 一般用于业务处理层类上
  • Repository一般用于数据持久层类上
  • Component一般用于不是以上三种情况
注解的方式注入属性
Value注解
@Component
public class User {
    @Value("101")
    private String uid;
    @Value("小明")
    private String uname;
    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", uname='" + uname + '\'' +
                ", book=" + book +
                '}';
    }
}

测试代码

System.out.println(ac.getBean("user", User.class));

在这里插入图片描述

Spring Autowired 自动注入注解
@Component
public class User {
    @Value("103")
    private String uid;
    @Value("小美")
    private String uname;
    @Autowired
    private Book book;
    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", uname='" + uname + '\'' +
                ", book=" + book +
                '}';
    }
}
//Book接口
public interface Book {}
//Book接口的实现类
import org.springframework.stereotype.Component;
@Component
public class JavaBook implements Book{
    @Override
    public String toString() {
        return "JavaBook{}";
    }
}

测试代码

System.out.println(ac.getBean("user", User.class));

在这里插入图片描述

//多加一个Book的实现类
@Component
public class SpringBook implements Book{
    @Override
    public String toString() {
        return "SpringBook{}";
    }
}

**注意:**如果多了一个实现类,并且也注入时,会报Book存在多个bean,spring不知道使用哪一个注入属性,此时需要Qualifier 注解

在这里插入图片描述

Qualifier注解

指定需要注入的对象,此时需要对Component类型的对象,添加value属性(指明生成bean的id)

注入类

@Component(value = "spring")
public class SpringBook implements Book{
    @Override
    public String toString() {
        return "SpringBook{}";
    }
}

被注入类User

@Autowired
//添加注解
@Qualifier("spring")
private Book book;

在这里插入图片描述

给方法注入对象类型参数

修改User类

@Component
public class User {
    @Value("103")
    private String uid;
    @Value("小美")
    private String uname;
    private Book book;
    @Autowired
    @Qualifier("javaBook")
    public void setBook(Book book) {
        this.book = book;
    }
    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", uname='" + uname + '\'' +
                ", javaBook=" + book +
                '}';
    }
}

JavaBook类

@Component()
public class JavaBook implements Book{
    @Value("101")
    private int bid;
    @Value("java")
    private String bname;
    @Override
    public String toString() {
        return "JavaBook{" +
                "bid=" + bid +
                ", bname='" + bname + '\'' +
                '}';
    }
}

测试类

 @Test
    public void test05(){
        AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(SpringConfig.class);
        System.out.println(acac.getBean("user",User.class));
    }

在这里插入图片描述

jdk Resource自动注入注解
import javax.annotation.Resource;
@Component
public class User {
    @Value("103")
    private String uid;
    @Value("小美")
    private String uname;
    @Resource()
    private Book book;
    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", uname='" + uname + '\'' +
                ", book=" + book +
                '}';
    }
}

测试代码

System.out.println(ac.getBean("user", User.class));

在这里插入图片描述

扫描注解:Java配置形式
@ComponentScan(value = "com.test.springdome02")
public class SpringConfig {
}
@Component
public class User {
    @Value("102")
    private String uid;
    @Value("小明")
    private String uname;
    @Autowired
    private Book book;
    @Override
    public String toString() {
        return "User{" +
                "uid='" + uid + '\'' +
                ", uname='" + uname + '\'' +
                ", book=" + book +
                '}';
    }
}
@Test
    public void test02(){
        AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(SpringConfig.class);
        System.out.println(acac.getBean("user", User.class));
    }

在这里插入图片描述

其他方式

持续更新

更新

  • 2022/1/3

结语

你好!^ _ ^ 谢谢你能看到这里
如果你对文章类容有不同看发或文章类容存在错误,请在下方评论处指出,谢谢^ _ ^
你好!如果文章符合你的胃口,你是否愿意点个赞呢?
你好!如果文章对你有帮助,你不妨分享出去,让更多人成长!
如果文章让你喜欢,不妨点个关注交个朋友,一起共同学习!
谢谢,你的点赞,关注,分享是对我写文章不小的动力!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值