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解析。