| Request
| 每次 HTTP 请求均创建一个新的 Bean,仅适用于 WebApplicationContext 环境 |
| Session
| 每次 HTTP Session 共享一个 Bean,不同 Session 使用不同的 Bean,仅适用于 WebApplicationContext 环境 |
DI(Dependency Injection),即依赖注入。其中 依赖指的是 Bean 对象的创建依赖于容器,是 Bean 对象的依赖资源;而注入则指的是 Bean 对象所以来的资源由容器来设置和装配 。
要实现依赖注入,通常有如下几种方法:
-
构造器注入
-
Set 注入
-
p 命名和 c 命名注入
2.1 构造器注入
由于构造器可以分为无参和有参构造器,所有又可以分为 有参构造器注入 和 无参构造器注入。
2.1.1 无参构造器注入
- 首先创建实体类
User
package com.cunyu.pojo;
/**
-
@author : cunyu
-
@version : 1.0
-
@className : User
-
@date : 2020/7/17 14:51
-
@description : TODO
*/
public class User {
private String name;
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println(“hello,” + name);
}
}
- 接着配置 Spring 配置文件,在
resources
目录下新建applicationContext.xml
<beans xmlns=“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”>
- 利用 Junit 进行单元测试
package com.cunyu.pojo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
-
@author : cunyu
-
@version : 1.0
-
@className : HelloTest
-
@date : 2020/7/17 14:56
-
@description : Hello 测试类
*/
public class HelloTest {
@Test
public void testSayHello() {
// 解析 Spring 配置文件,生成管理相应的 Bean 对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”);
// getBean() 方法的参数即为 Spring 配置文件中 bean 的 id
User user = (User) applicationContext.getBean(“user”);
user.sayHello();
}
}
2.1.2 有参构造器注入
- 同样先创建一个实体类,同时添加有参构造器方法
package com.cunyu.pojo;
/**
-
@author : cunyu
-
@version : 1.0
-
@className : User
-
@date : 2020/7/17 14:51
-
@description : TODO
*/
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println(“hello,” + name);
}
}
- 配置 Spring 配置文件
此时配置 Spring 配置文件有 3 种不同的方法:
- 通过
index
下标属性设置
- 通过参数名设置
- 通过参数类型设置
- 通过 Junit 测试
package com.cunyu.pojo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
-
@author : cunyu
-
@version : 1.0
-
@className : HelloTest
-
@date : 2020/7/17 14:56
-
@description : Hello 测试类
*/
public class HelloTest {
@Test
public void testSayHello() {
// 解析 Spring 配置文件,生成管理相应的 Bean 对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”);
// getBean() 方法的参数即为 Spring 配置文件中 bean 的 id
User user = (User) applicationContext.getBean(“user”);
user.sayHello();
}
}
2.2 Set 注入
要注入某属性,则该属性必须有 set()
方法;
2.2.1 创建实体类
package com.cunyu.pojo;
/**
-
@author : cunyu
-
@version : 1.0
-
@className : Address
-
@date : 2020/7/17 16:10
-
@description : 地址类
*/
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
package com.cunyu.pojo;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.Map;
/**
-
@author : cunyu
-
@version : 1.0
-
@className : User
-
@date : 2020/7/17 14:51
-
@description : TODO
*/
public class User {
private String name;
private Address address;
private String[] cars;
private List pets;
private Map<String, String> cards;
private Set games;
private String girlFriend;
private Properties info;
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
public String[] getCars() {
return cars;
}
public List getPets() {
return pets;
}
public Map<String, String> getCards() {
return cards;
}
public Set getGames() {
return games;
}
public String getGirlFriend() {
return girlFriend;
}
public Properties getInfo() {
return info;
}
public void setName(String name) {
this.name = name;
}
public void setAddress(Address address) {
this.address = address;
}
public void setCars(String[] cars) {
this.cars = cars;
}
public void setPets(List pets) {
this.pets = pets;
}
public void setCards(Map<String, String> cards) {
this.cards = cards;
}
public void setGames(Set games) {
this.games = games;
}
public void setGirlFriend(String girlFriend) {
this.girlFriend = girlFriend;
}
public void setInfo(Properties info) {
this.info = info;
}
public void display() {
System.out.println("name = " + name + ", address = " + address.getAddress() + ", cars = ");
for (String car : cars
) {
System.out.print(car + “\t”);
}
System.out.println("pets: " + pets);
System.out.println(“card:” + cards);
System.out.println(“games:” + games);
System.out.println(“gf:” + girlFriend);
System.out.println(“info:” + info);
}
}
2.2.2 各类型属性注入
- 常量注入
- Bean 注入
- 数组注入
奥迪
小牛
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
0R5Kqz-1713802568959)]
[外链图片转存中…(img-HytufMQw-1713802568960)]
《MySQL高级知识笔记》
[外链图片转存中…(img-kpU4b2fp-1713802568960)]
[外链图片转存中…(img-DnbBcmyY-1713802568960)]
[外链图片转存中…(img-pmc8jZxD-1713802568961)]
[外链图片转存中…(img-4RsDBe4T-1713802568961)]
[外链图片转存中…(img-SGMvunfU-1713802568961)]
[外链图片转存中…(img-aAteo1lm-1713802568961)]
[外链图片转存中…(img-yh2epTCT-1713802568962)]
[外链图片转存中…(img-mCt9BXSz-1713802568962)]
[外链图片转存中…(img-OXZdqMci-1713802568962)]
[外链图片转存中…(img-cJ6us7Au-1713802568962)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-ej4RhHgD-1713802568963)]
关注我,点赞本文给更多有需要的人
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!