文章目录
前言
依赖注入有很多种不同的方式,接下来我们来逐一学习。
一、介绍
注入方式大体划分为两种:
- 手动注入
- 自动注入
二、手动注入
1.spring bean
Book
package org.example.di;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Create by zjg on 2024/3/30
*/
public class Book {
private String bName;
private String author;
private Version master;
private String[]labels;
private List<Version> versions;
private List<Date> upgradeDate;
private Map<String,Object> readerComments;
private Set<Integer>pageSize;
public Book() {
}
public Book(String bName, String author) {
this.bName = bName;
this.author = author;
}
public String getbName() {
return bName;
}
public void setbName(String bName) {
this.bName = bName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Version getMaster() {
return master;
}
public void setMaster(Version master) {
this.master = master;
}
public String[] getLabels() {
return labels;
}
public void setLabels(String[] labels) {
this.labels = labels;
}
public List<Version> getVersions() {
return versions;
}
public void setVersions(List<Version> versions) {
this.versions = versions;
}
public List<Date> getUpgradeDate() {
return upgradeDate;
}
public void setUpgradeDate(List<String> upgradeDate) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
List<Date> dateList=new ArrayList<>();
for(String date:upgradeDate){
dateList.add(sdf.parse(date));
}
this.upgradeDate=dateList;
}
public Map<String, Object> getReaderComments() {
return readerComments;
}
public void setReaderComments(Map<String, Object> readerComments) {
this.readerComments = readerComments;
}
public Set<Integer> getPageSize() {
return pageSize;
}
public void setPageSize(Set<Integer> pageSize) {
this.pageSize = pageSize;
}
@Override
public String toString() {
return "Book{" +
"bName='" + bName + '\'' +
", author='" + author + '\'' +
", master=" + master +
", labels=" + Arrays.toString(labels) +
", versions=" + versions +
", upgradeDate=" + upgradeDate +
", readerComments=" + readerComments +
", pageSize=" + pageSize +
'}';
}
}
Version
package org.example.di;
/**
* Create by zjg on 2024/3/30
*/
public class Version {
private int version;
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
@Override
public String toString() {
return "Version{" +
"version=" + version +
'}';
}
}
2.多种类型
2.1 java 原生set
Book book=new Book();
book.setbName("java");
book.setAuthor("stilen");
2.2 spring set注入
<bean id="book" class="org.example.di.Book">
<property name="bName" value="java编程思想"></property>
<property name="author"><null></null></property>
</bean>
Book book = context.getBean("book", Book.class);
2.3 java 原生构造器
Book book=new Book("python","jimes");
2.4 spring构造器注入
<bean id="book2" class="org.example.di.Book">
<constructor-arg name="bName" value="<<活着>>"></constructor-arg>
<constructor-arg name="author">
<value><![CDATA["<余华>"]]></value>
</constructor-arg>
<!--外部bean引入-->
<property name="master" ref="version"></property>
</bean>
Book book = context.getBean("book2", Book.class);
2.5 外部bean引入
<bean id="version" class="org.example.di.Version" scope="prototype">
<property name="version" value="1"></property>
</bean>
<bean id="book" class="org.example.di.Book">
<!--外部bean引入-->
<property name="master" ref="version"></property>
</bean>
2.6 内部bean引入
<bean id="book" class="org.example.di.Book">
<constructor-arg name="bName" value="<<活着>>"></constructor-arg>
<constructor-arg name="author">
<value><![CDATA["<余华>"]]></value>
</constructor-arg>
<property name="master">
<bean id="version" class="org.example.di.Version">
<property name="version" value="2"></property>
</bean>
</property>
</bean>
2.7 级联赋值
<bean id="book4" class="org.example.di.Book">
<property name="master" ref="version"></property>
<property name="master.version" value="3"></property>
</bean>
2.8 array
<bean id="book" class="org.example.di.Book">
<property name="labels">
<array>
<value>斋藤飞鸟</value>
<value>张予曦</value>
<value>迪丽热巴</value>
</array>
</property>
</bean>
2.9 list
upgradeDate字段类型是日期,在set方法那里做了转换
<bean id="book" class="org.example.di.Book">
<property name="versions">
<list>
<ref bean="version"></ref>
<bean id="version2" class="org.example.di.Version">
<property name="version" value="2"></property>
</bean>
</list>
</property>
<property name="upgradeDate">
<list>
<value>2024-03-29</value>
<value>2024-03-30</value>
<value>2024-03-31</value>
</list>
</property>
</bean>
2.10 map
map的value是Object,所以存放什么都行
<bean id="book" class="org.example.di.Book">
<property name="readerComments">
<map>
<entry>
<key>
<value>Sean Brdiy</value>
</key>
<value>This is good idea!</value>
</entry>
<entry>
<key>
<value>version</value>
</key>
<ref bean="version"></ref>
</entry>
</map>
</property>
</bean>
2.11 set
<bean id="book10" class="org.example.di.Book">
<property name="pageSize">
<set>
<value>1</value>
<value>2</value>
<value>3</value>
</set>
</property>
</bean>
三、自动注入
1. spring bean
1.1 Controller
package org.example.auto.controller;
import org.example.auto.service.UserService;
public class UserController {
UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void addUser(){
System.out.println("执行...UserController");
userService.addUserService();
}
}
1.2 Service
package org.example.auto.service;
public interface UserService {
public void addUserService();
}
1.3 ServiceImpl
package org.example.auto.service.impl;
import org.example.auto.dao.UserDao;
import org.example.auto.service.UserService;
public class UserServiceImpl implements UserService {
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUserService() {
System.out.println("执行...UserServiceImpl");
userDao.addUserDao();
}
}
1.4 Dao
package org.example.auto.dao;
public interface UserDao {
public void addUserDao();
}
1.5 DaoImpl
package org.example.auto.dao.impl;
import org.example.auto.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void addUserDao() {
System.out.println("执行...UserDaoImpl");
}
}
1.6 config
<bean id="userDao" class="org.example.auto.dao.impl.UserDaoImpl"></bean>
2. byType
<bean id="userController" class="org.example.auto.controller.UserController" autowire="byType"></bean>
3. byName
<bean id="userService" class="org.example.auto.service.impl.UserServiceImpl" autowire="byName"></bean>
总结
回到顶部
这一章内容太多了,关于引入util、p命名空间和引入外部文件单独拆分出来了。