博客
关于我
Spring学习(三):IOC容器详解
阅读量:80 次
发布时间:2019-02-25

本文共 3358 字,大约阅读时间需要 11 分钟。

Spring IOC基础入门

1. 什么是IOC?

IOC(Inversion of Control,控制反转)的概念简单来说,就是将对象的创建和对象之间的调用过程交给Spring来管理。这种反转意味着你不再在代码中直接控制对象的生命周期,而是通过Spring的IOC容器来实现。

创建对象实例的控制权从代码中剥离到IOC容器控制,这种方式通过配置文件(如XML文件)来实现,侧重于原理的理解。

2. IOC的底层原理

IOC的实现主要依赖于以下几个关键点:

  • XML解析:使用DOM4j等工具解析XML配置文件。
  • 工厂模式:通过工厂类创建对象实例。
  • 反射创建类对象:通过反射机制动态创建类实例。

例如:

Class clazz = Class.forName("com.example.MyClass");  MyClass instance = clazz.newInstance();  return instance;

3. XML注入实现IOC

在Spring中,XML配置文件是实现IOC的常用方式。以下是通过XML注入实现IOC的详细步骤:

3.1 注入常规类型属性
  • set方法注入:
  • 在类中定义属性和对应的set方法。
  • 在XML文件中添加<property>标签。

示例:

  • 有参构造注入:
  • 在类中定义有参构造方法。
  • 在XML文件中添加<constructor-arg>标签。

示例:

3.2 P空间注入(了解)
  • set方法注入:在类中定义属性和对应的set方法。
  • XML配置:在beans中添加xmlns:p="http://www.springframework.org/schema/p"属性;在bean中添加p:name属性。

示例:

4. 注入特殊类型属性

在Spring中注入特殊类型属性(如空值、特殊符号、外部Bean等)可以通过以下方式实现:

  • 空值注入:

  • 特殊符号注入:

    或者使用CDATA:

    >]]>
  • 外部Bean注入:

5. 注入对象集合

在Spring中注入对象集合(如List、Set、Map等)可以通过以下方式实现:

  • ** Dept类**:

    public class Dept {      private List
    empList; public void setEmpList(List
    empList) { this.empList = empList; } }
  • ** Emp类**:

    public class Emp {      private String eName;      public void seteName(String eName) {          this.eName = eName;      }  }
  • XML配置:

6. 自动装配(Autowire)

Spring可以根据属性名称或类型进行自动装配。使用byType时,相同类型的Bean不能配置多个。

示例:

7. 工厂Bean

工厂Bean(FactoryBean)是Spring中一种特殊的Bean类型。其定义方式如下:

  • 实现FactoryBean接口:

    public class MyBean implements FactoryBean
    { @Override public User getObject() throws Exception { User user = new User(); user.setName("张三"); return user; } @Override public Class
    getObjectType() { return null; } @Override public boolean isSingleton() { return false; } }
  • XML配置:

8. 注解方式实现IOC

Spring提供了一系列注解(如@Component、@Service、@Controller、@Repository等)来简化XML配置,以下是使用注解实现IOC的示例:

  • Service注解:

    @Service("userService")  public class UserService {      @Autowired      private UserDao userDao;      public void add() {          userDao.update();      }  }
  • Controller注解:

    @Controller  public class MyController {      @Autowired      private MyService myService;      @GetMapping("/test")      public String test() {          return myService.doSomething();      }  }

9. 注解注入

在Spring中,注解注入(@Autowired、@Qualifier、@Resource、@Value等)是实现属性注入的常用方式。

  • @Autowired注入:

    @Autowired  private UserDao userDao;
  • @Qualifier注入:

    @Autowired  @Qualifier(value = "userDaoImpl2")  private UserDao userDao;
  • @Resource注入:

    @Resource(name = "userDaoImpl")  private UserDao userDao;
  • @Value注入:

    @Value("${my.names}")  private List
    names;

10. 完全注解开发

在Spring Boot项目中,可以通过注解的方式实现完全的注解开发:

  • 配置类:

    @Configuration  @ComponentScan(basePackages = {"com.example"})  public class SpringConfig {  }
  • 测试类:

    @Test  public void test() {      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);      UserService userService = context.getBean("userService", UserService.class);      userService.add();  }

通过以上方法,可以在Spring项目中实现IOC的核心功能。从简单的XML注入到复杂的注解开发,Spring为开发者提供了极为灵活和强大的配置方式。

转载地址:http://pis.baihongyu.com/

你可能感兴趣的文章
python各进制的表述与转换
查看>>
python各种库安装
查看>>
python可视化matplotlib_如何使用Python中最强大的可视化工具Matplotlib?
查看>>
python可维护性_使用这7大神器,让你的Python 代码更容易于维护
查看>>
Python只运行一次while循环
查看>>
python变量的详细教程_Python零基础入门教程之语法入门[变量](第二期)
查看>>
Python变量命名方法-ChatGPT4o作答
查看>>
Python变量与运算符
查看>>
Python变量/运算符/函数/模块/string
查看>>
python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法
查看>>
python系列【仅供参考】:python flask框架 debug功能
查看>>
python发送notes邮件_使用python在Lotus Notes中发送邮件
查看>>
Python双版本下创建一个Scrapy(西瓜皮)项目
查看>>
Python双版本下No module named 'requests'
查看>>
python及pycharm2018软件安装教程
查看>>
python去重txt文本_Python实现的txt文件去重功能示例
查看>>
python去掉列表的逗号,从Python列表项中删除标点符号
查看>>
Python卸载所有包
查看>>
python单线程下实现多个socket并发
查看>>
Python单元测试框架介绍(超详细~)
查看>>