spring自动装配

一、Bean手动装配

 applicationContext.xml

<!--把testDao对象的创建权交给Spring-->
<bean id="testDao" class="dao.TestDaoImpl"></bean>

public class SpringTest {

    @Test
    public void demo() {
        //初始化Spring容器ApplicationContext,加载配置文件
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取testDao实例
        TestDao testDao = (TestDao) application.getBean("testDao");     调用"dao.TestDaoImpl"这个类
        testDao.sayHello();
    }
}

手动装配类里面的置要把set方法写出来----------------装配类变量

 applicationContext.xml

<bean id="He" class="dao.Hello">
<property name="str" value="Spring"/>
</bean>
public class SpringTes {

    @Test
    public void demo(){
        //初始化Spring容器ApplicationContext,加载配置文件
        ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器获取testDao实例
        Hello testDao = (Hello) application.getBean("He");
        System.out.println(testDao.toString());
    }
}

  

传类参数的话配置文件这么写---------------装配类

<bean id="mp" class="dao.TestDaoImpl"></bean>
<bean id="He" class="dao.Hello">
<property name="testDao" ref="mp"/> name是dao.Hello里面的变量 ref取上面id=mp的类

</bean>

自动装配的加 autowire 他可以根据 set方法后面的英文查找(不分大小写)
    <bean id="cat" class="dao.Cat"></bean>
<bean id="Do" class="dao.Dog" autowire="byName">
<property name="str" value="mp"/>
<!-- <property name="cat" ref="cat"/>--> (省略了这句)
</bean>
自动装配的加 autowire="byType" 他可以根据 配置文件class="dao.Cat"找 相同的就可以省去id
    <bean id="cat" class="dao.Cat"></bean>
<bean id="Do" class="dao.Dog" autowire="byType">
<property name="str" value="mp"/>
<!-- <property name="cat" ref="cat"/>--> (省略了这句)
</bean>


二、注解装配

https://www.bilibili.com/video/BV1WE411d7Dv?p=12

---------------------------第一波

@Autowired 注解

1、省略set的方法书写,直接在变量上面标注即可,他可以在配置文件  <bean class="dao.Cat"></bean>找到且引入这个了类

 applicationContext.xml

<bean id="D2" class="dao.Cat"></bean>

<bean id="D1" class="dao.Cat"></bean>
<bean id="Do" class="dao.Dog" ></bean>

科普
@Autowired
@Qualifier(value = "Do3")
这2个是配对的,如果配置文件存在多个配置的类 可以用Qualifier指定一个id的类去装配


 ----------------------第二波--注解装配(不需要在配置文件里面注册类了)

配置文件

<?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/>
<!--    扫描包下面的注解注解就生效-->
    <context:component-scan base-package="dao"/>

</beans>

 那么就可以使用注解装配

@Component
public class Hello {
private String name="kaibin";

public void CAt() {
System.out.println("喵~~");
}
}

@Component (中文意思就是组件)就等价于在配置文件里面写   <bean id="hello" class="dao.Hello"></bean>

@Value("kaibin2")
public void setName(String name) {
this.name = name;
}

@Value("kaibin")
private String name;

@Value  就等价于 

<bean id="hello" class="dao.Hello">

<property name="name" value="kaibin2"/>

</bean>

 

---------------------------------这里呢 应为mvc分层所以相同的注解会因为不同的层油不同的叫法 

科普: server controller dao各层关系   https://blog.csdn.net/u010786902/article/details/50948297

@Component衍生注解

dao层  @Repository

server层  @Service

controller层 @Controller

这四个注解的功能都是一样的,把某个类注册到Spring中

@RestController 这个注解等效于 @Controller加上 @ResponseBody,添加了这个注解就是让这个类返回json串,这是spring内部提供的json解析。

原文地址:https://www.cnblogs.com/kaibindirver/p/14961473.html