Spring DI依赖注入,自动装配
来源:互联网 发布:为什么要探索宇宙 知乎 编辑:程序博客网 时间:2024/06/11 16:18
1. Spring DI 详解
什么是DI
依赖注入;说白了,就是给类中的属性赋值操作
几种注入方式
1 构造注入
2 Setter注入
2.1 Value:直接注入的真实的 “值”
2.2 Ref:bean的id,可以说是引用
2.3 数组注入
2.4 List注入
2.5 Map注入
2.6 Set注入
2.7 Null注入
2.8 Properties
public class User {
private String name;
private String[] books;
private List<String> courses;
private Map<String,String> cards;
private Set<String> games;
private String wife;
private Properties properties;
private Address address;
}
public class Address {
private String name;
public void setName(String name) {
this.name =name;
}
public Address(String name) {
super();
this.name =name;
}
@Override
public String toString() {
return "Address [name=" +name +"]";
}
}
注意:所有的属性必须有setter方法,要想显示出信息,要加上toString();方法!
<beanid="user"class="com.bjsxt.pojo.User"scope="prototype">
<propertyname="name"value="陈冠希"></property>
<!-- 数组注入 -->
<propertyname="books">
<array>
<value>小白书</value>
<value>白皮书</value>
<value>把妹秘籍</value>
</array>
</property>
<!-- List 注入 -->
<propertyname="courses">
<list>
<value>java从入门到精通</value>
<value>java从精通到精辟</value>
</list>
</property>
<!-- Map注入 -->
<propertyname="cards">
<map>
<entry>
<key><value>ICBC</value></key>
<value>工商银行</value>
</entry>
<entrykey="ABC">
<value>农业银行</value>
</entry>
</map>
</property>
<!-- Set 注入 -->
<propertyname="games">
<set>
<value>王者荣耀</value>
<value>LOL</value>
<value>dota</value>
</set>
</property>
<!-- 直接赋值为null -->
<!-- <property name="wife"><value>null</value></property> -->
<!-- null注入 -->
<propertyname="wife"><null/></property>
<!-- properties 注入 -->
<propertyname="properties">
<props>
<propkey="driver">com.mysql.jdbc.Driver</prop>
<propkey="url">jdbc:mysql://localhost:3306/mybatis</prop>
<propkey="username">root</prop>
<propkey="password">root</prop>
</props>
</property>
</bean>
<!-- ref 注入address -->
<propertyname="address"ref="address"></property>
2. 自动装配
Autowire
Default:默认,跟谁有关系!跟命名空间的default-autowire="default"有关系。
no:不注入。
Byname :按照名称来进行注入,但是,setter方法不能丢!内置还是走的setter方法。
<!-- userDao:正好跟UserServiceImpl中的userDao一致! -->
<beanid="userDao"class="com.bjsxt.dao.impl.UserOracleDaoImpl"></bean>
<beanid="mysql"class="com.bjsxt.dao.impl.UserMysqlDaoImpl"></bean>
<!-- ByName:按照名称来进行注入,名称指的是谁? -->
<beanid="userService"class="com.bjsxt.service.impl.UserServiceImpl"autowire="byName"/>
byType:按照类型注入,如果有多个匹配的话。则会报错,使用时请注意!
错误原因是:
<beanid="userDao"class="com.bjsxt.dao.impl.UserOracleDaoImpl"></bean>
<bean id="mysql"class="com.bjsxt.dao.impl.UserMysqlDaoImpl"></bean>
以上两个实现类都属于UserDao,而我们的UserServiceImpl只需要一个!
Constructor:构造注入
public UserServiceImpl(UserDaouserDao) {
super();
this.userDao =userDao;
}
<beanid="userService"class="com.bjsxt.service.impl.UserServiceImpl"autowire="constructor"/>
default-autowire:在命名空间下使用,在命名空间下使用作用域是整个的配置文件。对所有的bean对象都起作用!
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="constructor"
>
则代表:配置文件中的全局都使用构造器注入!
问题:default-autowire="constructor"和autowire="byName"同时存在的时候。怎么处理?
就近原则!
同时也适用于js,css。
3. 总结
Spring:ioc(DI) 依赖注入,控制反转!
注入:就是给对象注入值
控制反转:则就是将对象的生命周期完全交给了spring容器来管理。
Spring-Ioc:为什么能够实现依赖注入,控制反转?原理!
基于反射,工厂。
- Spring DI依赖注入,自动装配
- Spring依赖注入 — 属性自动装配
- Spring依赖注入 — 属性自动装配
- Spring依赖注入,自动扫描组件,自动装配,注解注入
- spring(依赖注入-DI)
- Spring DI 依赖注入
- Spring-DI(依赖注入)
- Spring依赖注入DI
- Spring 依赖注入(DI)
- Spring DI[依赖注入]
- Spring DI(依赖注入)
- Spring依赖注入(DI)
- Spring依赖注入DI
- 控制反转IOC(依赖注入DI),注入类型,自动装配相关注解
- Spring学习之旅(一) 依赖注入(DI)与Spring Bean的装配
- spring 自动装配注入
- 依赖注入与自动装配
- 依赖注入与自动装配
- 以客户为中心进行数据挖掘
- 为什么Nginx的性能要比Apache高很多?
- HDU
- Thrift 入门例子
- 清晰理解堆排序
- Spring DI依赖注入,自动装配
- iframe跨域
- Codeforces Round #433 (Div. 2) Planning (贪心+并查集)
- cnpm 安装vue
- jdk安装
- 第二十四节:兼容所有浏览器滚动条滚动的js
- μcos-II任务堆栈、任务控制块和任务代码
- 16. Yii 2.0 http缓存
- JavaScript 面向对象(四)call()和apply()