博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的核心和Bean的详解
阅读量:4182 次
发布时间:2019-05-26

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

1、spring的核心

Spring的核心是spring容器,spring容器提供了对bean的创建、管理、销毁等。Spring框架很大程度上继承和延续了servlet的思想。

2、Bean的详解

2.1、Bean是什么?

Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化);

凡是有方法或属性的类都需要实例化,实例化之后才能去使用这些方法和属性;
Spring中,凡是子类及带有方法或属性的类都要加上@Bean注册到spring容器中,通过spring容器去管理。
把Bean理解为类的代理或代言人(是通过反射、代理来实现的),这样它就能代表类拥有该拥有的东西了(类的名字、属性、方法)

2.2、Bean的分类

1、一类是使用Bean,即是把spring3中已经在XML文件中配置好的Bean拿来用,在spring4中是依赖注解去装配,一个带有@configuration的类就是一个配置类,在配置类里使用@Bean完成属性、方法的组装;@Bean 用在方法上,告诉Spring容器,你可以从下面这个方法中拿到一个Bean。这种bean的默认名字是方法的名字,也可以通过@Bean(name = “xxx”)去指定名字。这种bean可以进行初始化和销毁设置。

默认为单例,使用了@Scope(“prototype”)将会是非单例的。
2、注册bean,即带有@Component@controller@service@Repository这些的注解。@Component这4个注解注入时,无法指定初始化和销毁方法。表明是个组件,默认的名字是类名,也可以自己定。如@Component(“name”),component没有明确角色的时候使用。@Controller一般用在展现层。@Repository一般用在数据访问层上面。@Service用在业务逻辑层。

2.3、Bean的获取

Bean的获取有2种方法,一种通过名字,一种通过类型。

AnnotationConfigApplicationContext context = new
AnnotationConfigApplicationContext(MyConfig.class);
System.out.println(context.getBean(MyBean.class));
System.out.println(context.getBean(”MyBean”));
AnnotationConfigApplicationContext 可以实现基于Java的配置类加载Spring的应用上下文,相比较于application.xml更加简洁高效。注意两者写法的区别。

2.4、Bean的三种初始化和销毁方法

1、实现spring指定的接口。通过注入Factory工厂装配Bean,初始化在装配完执行

public class Cat implements InitializingBean, DisposableBean {
public void afterPropertiesSet() throws Exception {
System.out.println("=afterPropertiesSet=");
}
@Override
public void destroy() throws Exception {
System.out.println("=destroy===");
}
}
2、装配bean时指定初始化和销毁方法(依赖性最低,但有局限性)
@Bean(initMethod=”init”,destoryMethod=”destory”)
public Dog createDog(){
return new Dog();
}

public class Dog {

public void init(){
System.out.println("=init=");
}
public void destroy(){
System.out.println("=destroy=");
}
}
3、采用注解的方式
public class Animal {
@PostConstruct
public void initial(){
System.out.println("--------initial-------");
}
@PreDestroy
public void close(){
System.out.println("--------close---------");
}
}

2.5、Bean的装配

1、通过通过RunnableFactoryBean装配Bean

RunnableFactoryBean是一个特殊的bean,用来创建别的bean,本例中是jeep。它实现了FactoryBean的三个方法:getObject()获取创建的实例对象;getObjectType()获取创建对象的类型(包装类);isSingleton:设置是否单例。
public class RunnableFactoryBean implements FactoryBean {
public Jeep getObject() throws Exception {
return new Jeep();
}
public Class<?> getObjectType() {
return Jeep.class;
}
public boolean isSingleton() {
return false;
}
}
装配bean:
@Bean
public RunnableFactoryBean createRunnableFactoryBean(){
return new RunnableFactoryBean();
}
2、通过注入Factory工厂装配Bean
先向spring容器中注入factory作为参数,等注入car时从spring容器中获取参数CarFactory注入。
@Bean
public CarFactory createJeepFactory(){
return new CarFactory();
}
@Bean
public Car createCar(CarFactory factory){
return factory.create();
}

public class CarFactory {

public Car create(){
return new Car();
}
}

2.6、Bean的作用域

Bean的作用域用于确定spring创建Bean的实例个数。

(1)singleton(单例),在spring容器中仅存在一个Bean实例,Bean以单例方式存在,默认值。

(2)Prototype,每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行XxxBean()。
(3)Request,每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境。
(4)Session,同一个HTTP session共享一个Bean,不同的session适用不同的bean,仅适用于WebApplicationContext环境。
(5)globalSession,一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境。

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

你可能感兴趣的文章
Git命令还原未提交的变更
查看>>
Linux系统中环境变量的配置
查看>>
Linux系统中配置脚本程序开机启动
查看>>
让Linux系统上的nginx支持php程序
查看>>
源码编译安装LNMP环境之Nginx篇
查看>>
源码编译安装LNMP环境之PHP篇
查看>>
Linux中rpm工具使用教程
查看>>
Linux中yum工具使用教程
查看>>
C++字符串函数
查看>>
mknod详解
查看>>
linux中的run-level何解?
查看>>
Linux内核编译详解(转自linuxSir)
查看>>
实模式,保护模式与V86模式
查看>>
628. Maximum Product of Three Numbers(排序)
查看>>
Linux内核-------同步机制(二)
查看>>
面试题31-------连续子数组的最大和(数组)
查看>>
epoll 实现Chat
查看>>
21. Merge Two Sorted Lists(链表)
查看>>
2. Add Two Numbers(链表)
查看>>
637. Average of Levels in Binary Tree(Tree)
查看>>