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

Spring IoC之DI实现注解配置形式,第1张

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

文章目录
    • Spring Annotaiton Config Bean
      • 如何注解的方式IoC
        • 扫描注解:XML配置形式
        • 注解的方式将注入bean
          • Component、Service、Repository、Controller
          • 四个注解的区别
        • 注解的方式注入属性
          • Value注解
          • Spring Autowired 自动注入注解
            • Qualifier注解
            • 给方法注入对象类型参数
          • jdk Resource自动注入注解
        • 扫描注解:Java配置形式
      • 其他方式
      • 持续更新
      • 更新
    • 结语

Spring Annotaiton Config Bean

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

如何注解的方式IoC 扫描注解:XML配置形式


        
    
                
                
        

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));
    }

其他方式
  • Spring XML配置

  • Spring 注解配置

持续更新 更新
  • 2022/1/3
结语

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5693077.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存