spring中常用的功能主要的是ioc和aop,此处主要说明下,实例注册和使用的方法,此为学习后的笔记记录总结

1.使用xml文件配置

在idea中创建maven工程,然后创建实例Person,然后在配置文件中配置bean,具体代码如下所示:,

public class Person {
private String name;
private Integer age; public Person(){
super();
} public Person(String name,Integer age){
super();
this.name=name;
this.age=age;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setAge(Integer age) {
this.age = age;
} public Integer getAge() {
return age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
<?xml version="1.0" encoding="UTF-8"?>
<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"> <bean id="user" class="com.enjoy.cap1.Person">
<property name="name" value="zhangsan"/>
<property name="age" value="23"/>
</bean>
</beans>
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* 类说明
*
* @Date: 2019/5/1 14:54
* @Version: 1.0
*/
public class MainTest1 {
public static void main(String []args){
ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
Person person= (Person) ac.getBean("user");
System.out.println(person);
}
}

以上是使用xml文件配置实现的bean的注册和使用,运行结果如下所示:

----------------------------------------------------------------------------
2.下面使用注解的方式进行bean的注册与使用
首先需要一个配置文件,本例使用MainConfig.java,实例同上Persion,测试文件MainTest.java文件
代码如下所示:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 类说明
*
* @Date: 2019/5/1 14:56
* @Version: 1.0
*/
@Configuration
public class MainConfig { @Bean
public Person person(){
return new Person("lisi",20);
}
}

public class MainTest2 {
public static void main(String []args){
ApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class);
Person person= (Person) app.getBean("person");
System.out.println(person);
}
}

运行结果如下所示:

 针对以上情况的特殊说明:
1)在获取bean的实例时,xml配置文件中给出class指定类的全路径名,id指定Bena的名称,是通过反射创建对象(Person)的实例,
创建时需要有构造器,否则会在运行时提示bean构造报错;或者使用默认的构造器,或者自己创建带参的构造器,在注入的时候设置构造器参数,
对象的创建是有spring容器来创建和管理,而不是对象本身,通过依赖注入完成对象的依赖关系。
2)使用注解方式实现bean的注册时,可以通过构造器的名字进行改写,或者通过bean标签指定bean的名字,而不是固定的实体类的构造器名字,
一般默认情况是构造器的名字。注解可以使用扫描配置或者import等标签配置使用其他标签

若是不想直接改方法的名字,可以在@Bean标签后面直接指定bean的名字,如下截图所示:

测试时使用注解中的测试类即可。此处不再进行测试说明。

3)以上是bean的注册使用说明,但若是类特别多,则配置起来就会特别繁琐,增加工作量,此时就可以通过扫描标签帮助注册bean实例,

代码说明如下所示;

@Configuration
@ComponentScan(value = "com.enjoy.cap2")
public class MainConfig {
}

测试类的代码如下所示:

public class Test02 {

    @Test
public void test(){
AnnotationConfigApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class);
String [] names=app.getBeanDefinitionNames();
for (String name:names){
System.out.println(name);
}
}
}

实体类不变,程序的运行结果如下所示;

4)在spring的容器中注册bean时默认是单例的,因为在整个容器中,通过id获取的时候,id值是唯一的,在容器启动时就创建并放到容器中(容器是一个map对象)

可以在配置文件中通过标签进行配置,在bean配置处,增加@Scope(“prototype”) ,可以实现多例,配置文件修改的代码如下所示:

测试类不变,在运行后会得出false的执行结果。

5)虽然spring容器中bean的注册默认是单例的,但可以通过标签@Lazy来指定获取对象时在进行bean实例的创建,而不是在容器启动时创建bean实例

不配置懒加载标签时,程序代码及运行结果如下所示;

package com.enjoy.cap4.config;

import com.enjoy.cap1.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* 类说明
*
* @Date: 2019/5/1 16:16
* @Version: 1.0
*/
@Configuration
public class MainConfig { @Bean
public Person person(){
System.out.println("在容器中添加Person类的bean实例");
return new Person("zhangsan",11);
}
}
public class Test04 {
public static void main(String []args){
AnnotationConfigApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class);
System.out.println("IOC容器创建完成........");
app.getBean("person");
}
}

程序的运行结果为;

若在配置文件中的bean实例上添加Lazy标签,代码如下所示:

spring中IOC容器注册和获取bean的实例的更多相关文章

  1. Spring 中 IoC 容器简介

    IoC 是一种通过描述来生成或者获取对象的技术,可以说 Spring 是一种基于 IoC 容器编程的框架 在一个系统中可以生成各种对象,并且这些对象都需要进行管理.为了描述这些对象关系,我们需要一个容 ...

  2. Spring中Ioc容器的注入方式

    1 通过setter方法注入 bean类: package com.test; public class UserServiceImplement implements IUserService { ...

  3. spring源码学习之路---IOC容器初始化要义之bean定义载入(五)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近工作很忙,时间不多,研究 ...

  4. Spring 深入——IoC 容器 01

    IoC容器的实现学习--01 目录 IoC容器的实现学习--01 简介 IoC 容器系列的设计与实现:BeanFactory 和 ApplicationContext BeanFactory load ...

  5. spring在IoC容器中装配Bean详解

    1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...

  6. 使用Spring容器动态注册和获取Bean

    有时候需要在运行时动态注册Bean到Spring容器,并根据名称获取注册的Bean.比如我们自己的SAAS架构的系统需要调用ThingsBoard API和Thingsboard交互,就可以通过Thi ...

  7. Spring重点—— IOC 容器中 Bean 的生命周期

    一.理解 Bean 的生命周期,对学习 Spring 的整个运行流程有极大的帮助. 二.在 IOC 容器中,Bean 的生命周期由 Spring IOC 容器进行管理. 三.在没有添加后置处理器的情况 ...

  8. Spring学习-- IOC 容器中 bean 的生命周期

    Spring IOC 容器可以管理 bean 的生命周期 , Spring 允许在 bean 声明周期的特定点执行定制的任务. Spring IOC 容器对 bean 的生命周期进行管理的过程: 通过 ...

  9. Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理

    Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理 前言 上一篇分析了BeanFactoryPostProcessor的作用,那么这一篇继续 ...

随机推荐

  1. leetcode645

    vector<int> findErrorNums(vector<int>& nums) { ; int S[N]; int n = nums.size(); ; i ...

  2. leetcode398

    public class Solution { int[] nums; Random rnd; public Solution(int[] nums) { this.nums = nums; this ...

  3. 用JS写一个简单的程序,算出100中7的倍数的最大值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. [codeforces126B]Password

    解题关键:KMP算法中NEXT数组的理解. #include<bits/stdc++.h> #define maxn 1000006 using namespace std; typede ...

  5. 【总结整理】json数据请求简化版理解(祺哥的成果)

    在同源js目录下新建.txt文件 { "news":[ {"title":"审计管理","time":"201 ...

  6. jQuery实现按钮5秒后可以点击

    废话少说,直接上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...

  7. ROS Learning-024 (提高篇-002) rviz的安装和使用

    ROS 提高篇-002 - rviz 的安装和使用 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS ...

  8. CodeForces 566D Restructuring Company (并查集+链表)

    题意:给定 3 种操作, 第一种 1 u v 把 u 和 v 合并 第二种 2 l r 把 l - r 这一段区间合并 第三种 3 u v 判断 u 和 v 是不是在同一集合中. 析:很容易知道是用并 ...

  9. register的功能

    register:这个关键字请求编译器尽可能 的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.这里注意是尽可能,不是绝对.你想想,一个CPU拥有 的寄存器也就那么几个或几十个,你要 ...

  10. java反射机制的粗略理解

    java反射机制: 涉及的对象:Class, Object, 函数:Class类:[forName(String className):static:getClass():public],Object ...