详解Spring IOC的使用
创始人
2025-06-01 07:44:31
0

目录

1.环境搭建

2.注入方式

2.1.配置文件

2.1.1.Set注入

2.1.2.构造器注入

2.2.注解注入

3.获取方式

4.Bean关系

5.Bean生命周期

6.Bean作用域


1.环境搭建

maven依赖:

org.springframeworkspring-webmvc5.2.0.RELEASE

在resources文件夹下创建xml文件:

......

项目结构:

 

2.注入方式

2.1.配置文件

2.1.1.Set注入

在xml中使用property标签,调用set方法进行注入。

实体类:

使用set方法注入,实体类中必须存在set方法,否则会注入失败。

package com.eryi.beans;public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

xml文件:


测试:

public static void main(String[] args) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");User user=applicationContext.getBean("user",User.class);System.out.println(user.toString());}

2.1.2.构造器注入

在xml文件中使用constructor-arg标签,调用构造器进行注入。

实体类:

使用构造器注入,实体类中必须存在构造器,否则会注入失败。

package com.eryi.beans;public class User {private String username;private String password;public User(String username, String password) {this.username = username;this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

xml:


测试:

public static void main(String[] args) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");User user=applicationContext.getBean("user",User.class);System.out.println(user.toString());}

2.2.注解注入

Spring支持通过注解的方式将注入实体注入IOC,然后通过注解去IOC中获取实体。

注入IOC的注解有:

@Component、@Repository、@Service、@Controller

@Component是通用的,后面三个只是为了细化层次为各个分层上的实体推出的,功能上来说都具有将实体注入IOC的能力。

从IOC中获取实体的注解有:

@Autowired

代码示例:

dao层:

package com.eryi.beans;import org.springframework.stereotype.Component;@Component
public class UserDao {public String findAll(){return "find all users";}
}

service:

@Component
public class UserService {private UserDao userDao;@Autowiredpublic UserService(UserDao userDao) {this.userDao = userDao;}public String findAll(){return  userDao.findAll();}
}

测试:

package com.eryi.beans;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class test {public static void main(String[] args) {ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService=applicationContext.getBean("userService",UserService.class);System.out.println(userService.findAll());}
}

3.获取方式

有两种获取方式:

  • 通过id
  • 通过类型

通过id:

UserService userService=applicationContext.getBean("userService",UserService.class);

通过类型:

UserService userService=applicationContext.getBean(UserService.class);

4.Bean关系

在Spring框架中,配置文件除了可以描述类以外,还可以描述Bean的依赖关系。

继承关系:




抽象:

标签中的“abstract”属性用于指定当前Bean是否为抽象Bean,其取值为“true”或“false”,默认为“false”。当一个Bean被指定为抽象Bean时,它不能被直接实例化,而只能作为其他Bean的父类或者模板。这个抽象Bean只是一个模板,其中可以定义一些通用的属性或方法,供其他Bean继承或者引用。

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");User user_01=applicationContext.getBean("childBean",User.class);
System.out.println(user_01);User user_02=applicationContext.getBean("parentBean",User.class);
System.out.println(user_02);

5.Bean生命周期

一个bean在完整生命周期中会触发的方法顺序:

  • 构造器

  • 注入属性(set、构造、或者命名空间)

  • init-method方法

  • 生成实例对象

  • destroy-method(容器关闭触发该方法)

注意:init-method、destroy-method需要配置才会生效。

配置:


实体类:

public class User {private String username;private String password;public User() {System.out.println("construction......");}public String getUsername() {return username;}public void setUsername(String username) {System.out.println("set......");this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}private void init(){System.out.println("init......");}private void destroy(){System.out.println("destroy......");}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

测试:

ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=context.getBean("user",User.class);
context.close();

6.Bean作用域

四种作用域:

  • singleton,默认的,在IOC初始化时创建容器中的实例,全局访问的是同一个实例。

  • prototype,IOC初始化时不生成实例,每次请求生成一个实例。

  • session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

  • request 该属性仅对HTTP请求产生作用,每次HTTP请求都会创建一个新的实例

  • global-session 所有的Session共享一个Bean实例。

相关内容

热门资讯

三八妇女节感恩活动倡议书学会感... 三八妇女节感恩活动倡议书“学会感恩 与爱同行”  亲爱的同学们:  你们知道三月八日是什么节日吗?是...
文明考风 诚信考试倡... “文明考风 诚信考试”倡议书“文明考风 诚信考试”倡议书亲爱的同学们:你们好!也许你还沉溺于缤纷的网...
学生交通安全倡议书 学生交通安... 学生交通安全倡议书  亲爱的同学们:  ,我县正处于交通大建设、大发展时期,道路交通出行环境复杂,交...
最新或2023(历届)寒假致家... 寒假致激的一封信尊敬的激:金龙送旧岁,瑞蛇迎春到。转眼就到学期结束了,为了让您的子女度过一个平安、愉...
文明课堂倡议书 文明课堂倡议书... 文明课堂倡议书  亲爱的同学们:  老师,是人类灵魂的工程师,是“传道、授业、解惑”者,他们给了我们...
保护鸟类的倡议书 保护鸟类的倡... 保护鸟类的倡议书亲爱的少先队员们:你们好!春天来了,报春的杜鹃唤醒了沉睡的生灵,南飞的大雁捎来了春天...
最新或2023(历届)捐款倡议... 捐款倡议书范文  大家好,  这应该是你们从我这边收到的n封捐助的倡议书了^-^   不过之前我只是...
学雷锋倡议书范文 学雷锋倡议书... 学雷锋倡议书范文  月日,毛泽东主席题词:向雷锋同志学习。由此,一个普通的轻士兵走进了亿万青人的心中...
疾病捐款倡议书 疾病捐款倡议书... 疾病捐款倡议书社会各界爱心人士: 拥有健康和快乐是我们每个人的梦想。当我们和朋友高歌、...
抗旱救灾倡议书 抗旱救灾倡议书... 抗旱救灾倡议书全省青少朋友、团员青、少先队员:近来,我国西南地区遭遇了历史罕见的特大旱灾,灾区青少在...
关于保护环境倡议书 关于保护环... 关于保护环境倡议书保护环境倡议书地球,我们同的家园,谁能不热爱这个美丽的星球?可你知道,这美丽的星球...
为民服务创先争优倡议书 如何开... “为民服务创先争优”倡议书团员青们:开展“为民服务创先争优”活动,是集团公司整个创先争优活动的有机组...
《诚信高考 拒绝作弊... 《诚信高考 拒绝作弊》倡议书 倡议书  同学们:  一一度的高考马上就要到了。你们如同出征的战士,摩...
贫困学生捐款倡议书 贫困学生捐... 贫困学生捐款倡议书全校教职员工:新学期伊始,大家迎来了两个喜庆的节日----教师节和中秋节。我们向辛...
节约用纸倡议书 节约用纸倡议书... 节约用纸倡议书为深入贯彻转方式、调结构大讨论活动的有关讲话精神,强化节能减排,建设生态绿色医院,降低...
环保倡议书范文大全 环保倡议书... 环保倡议书范文大全  我是地理教师。每,当我教到“自然资源”这一章节时,我都让学生写环保倡议书,主要...
市地税局创先争优活动倡议书 税... 市地税局创先争优活动倡议书服务经济筑和谐,创先锋促发展——xx市地税局创先争优活动倡议书各基层党组织...
积极学习倡议书 积极学习倡议书... 积极学习倡议书  告别了虎春节,我们迎来了新的学期,回到了熟悉的校园,又与尊敬的老师和可爱的同学们学...
争做文明礼貌学生倡议书 践行文... 争做文明礼貌学生倡议书  敬爱的老师,亲爱的同学们:  大家好!   度过了愉快、充实的寒假,在洋...
禁止吃零食的倡议书 禁止吃零食... 禁止吃零食的倡议书  零食是指那些含热量高,多数没有其它营养的食物,这些食品不卫生,容易穿了染乙肝,...