博客
关于我
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/

你可能感兴趣的文章
Objective-C实现Diffie-Hellman算法(附完整源码)
查看>>
Objective-C实现dijkstra银行家算法(附完整源码)
查看>>
Objective-C实现Dinic算法(附完整源码)
查看>>
Objective-C实现disjoint set不相交集算法(附完整源码)
查看>>
Objective-C实现DisjointSet并查集的算法(附完整源码)
查看>>
Objective-C实现djb2哈希算法(附完整源码)
查看>>
Objective-C实现DNF排序算法(附完整源码)
查看>>
Objective-C实现double factorial iterative双阶乘迭代算法(附完整源码)
查看>>
Objective-C实现double factorial recursive双阶乘递归算法(附完整源码)
查看>>
Objective-C实现double hash双哈希算法(附完整源码)
查看>>
Objective-C实现double linear search recursion双线性搜索递归算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表算法(附完整源码)
查看>>
Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
查看>>
Objective-C实现Edmonds-Karp算法(附完整源码)
查看>>
Objective-C实现EEMD算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现entropy熵算法(附完整源码)
查看>>
Objective-C实现euclidean distance欧式距离算法(附完整源码)
查看>>