spring-IOC容器

阳光穿透心脏的1/2处 2023-01-18 14:27 301阅读 0赞

文章目录

  • 一 IOC容器
    • 1.1 Bean管理-XML方式
      • 创建对象
      • 注入属性
        • set注入属性
        • 有参构造注入属性
        • p名称空间注入属性
        • 注入特殊类型属性
          • 注入内部Bean
          • 级联赋值
            • 第一种
            • 第二种
    • 1.2 Bean管理-注解方式
      • 创建对象
      • 注入属性
        • @Autowired 根据属性进行注入
        • @Qualifier 根据名称进行注入
      • 完全注解开发
        • 创建配置类:
        • 编写测试类

一 IOC容器

1.1 Bean管理-XML方式

创建对象

注入属性

set注入属性

有参构造注入属性

p名称空间注入属性

注入特殊类型属性

注入内部Bean

在这里插入图片描述
Dept.java

  1. package com.jh.spring5.bean;
  2. //部门类
  3. public class Dept {
  4. //部门名称
  5. private String dname;
  6. public void setDname(String dname) {
  7. this.dname = dname;
  8. }
  9. @Override
  10. public String toString() {
  11. return "Dept{" +
  12. "dname='" + dname + '\'' +
  13. '}';
  14. }
  15. }

Emp.java

  1. package com.jh.spring5.bean;
  2. //员工类
  3. public class Emp {
  4. //员工名字
  5. private String ename;
  6. //员工性别
  7. private String gender;
  8. //员工所属部门
  9. private Dept dept;
  10. public void setEname(String ename) {
  11. this.ename = ename;
  12. }
  13. public void setGender(String gender) {
  14. this.gender = gender;
  15. }
  16. public void setDept(Dept dept) {
  17. this.dept = dept;
  18. }
  19. public void add(){
  20. System.out.println(ename+","+gender+","+dept);
  21. }
  22. }

bean1.xml

  1. <bean id="emp" class="com.jh.spring5.bean.emp">
  2. <property name="ename" value="lucy"></property>
  3. <property name="gender" value="女"></property>
  4. <property name="dept">
  5. <bean id="deot" class="com.jh.spring5.bean.Dept">
  6. <property name="dname" value="安保部"></property>
  7. </bean>
  8. </property>
  9. </bean>

测试

  1. @Test
  2. public void testbean(){
  3. ApplicationContext context =
  4. new ClassPathXmlApplicationContext("bean1.xml");
  5. Emp emp = context.getBean("emp",Emp.class);
  6. emp.add();
  7. }
级联赋值
第一种

测试

  1. <bean id="emp" class="com.jh.spring5.bean.Emp">
  2. <property name="ename" value="lucy"></property>
  3. <property name="gender" value="女"></property>
  4. <property name="dept" ref="dept"></property>
  5. </bean>
  6. <bean name="dept" class="com.jh.spring5.bean.Dept">
  7. <property name="dname" value="保安lll部"></property>
  8. </bean>
第二种

Emp.java

  1. public Dept getDept() {
  2. return dept;
  3. }

测试

  1. <bean id="emp" class="com.jh.spring5.bean.Emp">
  2. <property name="ename" value="lucy"></property>
  3. <property name="gender" value="女"></property>
  4. <property name="dept" ref="dept"></property>
  5. <property name="dept.dname" value="技pppp术部"></property>
  6. </bean>
  7. <bean name="dept" class="com.jh.spring5.bean.Dept">
  8. <property name="dname" value="保安lll部"></property>
  9. </bean>

1.2 Bean管理-注解方式

创建对象

  1. package com.jh.spring5.service;
  2. import com.jh.spring5.dao.UserDao;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class UserService {
  7. public void add(){
  8. System.out.println("service add.......");
  9. }
  10. }
  11. <?xml version="1.0" encoding="UTF-8"?>
  12. <beans xmlns="http://www.springframework.org/schema/beans"
  13. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  14. xmlns:context="http://www.springframework.org/schema/context"
  15. xsi:schemaLocation="http://www.springframework.org/schema/beans
  16. http://www.springframework.org/schema/beans/spring-beans.xsd
  17. http://www.springframework.org/schema/context
  18. http://www.springframework.org/schema/context/spring-context.xsd">
  19. <context:component-scan base-package="com.jh">
  20. </context:component-scan>
  21. </beans>
  22. @Test
  23. public void test(){
  24. ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
  25. UserService userService = context.getBean("userService",UserService.class);
  26. System.out.println(userService);
  27. userService.add();
  28. }

注入属性

列子:在service里注入dao对象

@Autowired 根据属性进行注入

新建 UserDaoImpl .java

  1. package com.jh.spring5.dao;
  2. import org.springframework.stereotype.Repository;
  3. @Repository
  4. public class UserDaoImpl implements UserDao {
  5. @Override
  6. public void add() {
  7. System.out.println("userdaoimpl.....");
  8. }
  9. }

UserService.java里加上

  1. @Service
  2. public class UserService {
  3. @Autowired
  4. private UserDao userDao;
  5. public void add(){
  6. userDao.add();
  7. System.out.println("service add.......");
  8. }
  9. }

@Qualifier 根据名称进行注入

原因:一个接口可能会有多个实现类
1.新建 userDaoImpl2.java

  1. @Repository
  2. public class UserDaoImpl2 implements UserDao {
  3. @Override
  4. public void add() {
  5. System.out.println("userdaoimpl2.....");
  6. }
  7. }

2.UserService.java
@Qualifier(value = “userDaoImpl”)注入userDaoImpl.java里的属性
@Qualifier(value = “userDaoImpl2”)注入userDaoImpl2.java里的属性

  1. @Service
  2. public class UserService {
  3. @Autowired
  4. @Qualifier(value = "userDaoImpl2")
  5. private UserDao userDao;
  6. public void add(){
  7. userDao.add();
  8. System.out.println("service add.......");
  9. }
  10. }

完全注解开发

创建配置类:

代替xml文件

  1. @Configurable

开启组件扫描

  1. @ComponentScan(basePackages = {"com.jh.spring5"})
  2. @Configurable
  3. @ComponentScan(basePackages = {
  4. "com.jh.spring5"})
  5. public class SpringConfig {
  6. }

编写测试类

  1. ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
  2. public class StuTest {
  3. @Test
  4. public void test(){
  5. ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
  6. UserService userService = context.getBean("userService",UserService.class);
  7. System.out.println(userService);
  8. userService.add();
  9. }
  10. }

发表评论

表情:
评论列表 (有 0 条评论,301人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringIOC容器

    1.什么是IOC IOC(Inversion of Control):其思想翻转资源获取的方向,传统的资源查找方法要求组件向容器发起请求查找资源,作为回应,容器适时

    相关 一步一步实现SpringIoc容器

    IoC(Inverse of Controll控制反转):指的是对象的创建方式进行了反转,传统的开发方式是程序员自己 new 对象,IoC就是将这一过程进行了反转,程序员不需要

    相关 SpringIOC 容器

    spring是可以解决对象创建以及对象之间依赖关系的一种框架。   通过添加模块,添加不同功能 1. Spring Core  spring的核心功能: IOC容器