Spring的核心容器Core

一、Spring Core

Spring容器

作用:用来创建并管理bean

bean实例的创建:使用反射的方式,创建bean的实例(xml配置文件里面体现的)

<!--这里相当于是通过类的全限定名用反射创建一个实例对象
MessageController MessageControllerBean=Class.forName("com.my.web.controller.MessageController").newInstance();
    -->
<bean id="MessageControllerBean" class="com.my.web.controller.MessageController">

容器的设计:使用的是工厂模式(BeanFactory),获得bean的方法Object getBean(String var1) ,它是在一个public interface BeanFactory中定义的方法

管理:容器中的每个bean都是spring容器默认按照单例方式管理的,可以通过设置

<bean id="MessageServiceImplBean"class="com.my.web.service.impl.MessageServiceImpl" scope="prototype">
</bean><!--更改为每次获取时创建不同的实例-->

ApplicationContext(一个应用的上下文,也就是全局的,这是一个接口),是一个顶层容器

1.ApplicationContext context=new ClassPathXmlApplicationContext("springConfig2.xml");
2.ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("springConfig.xml");//这里的构造方法里面的参数指的是
在类路径下(src)的配置文件(xxx-config.xml);若是采用注解的方式,需要在配置文件里面使用 <context:component-scan base-package="com.my">
</context:component-scan>//完成类的扫描工作
//基于注解的spring容器加载方式,不需要配置文件就行,给一个根包就可以了
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext("com.my");

IOC或者DI

IOC:Inverse Of Control(控制反转)

DI:Dependency Injection(依赖注入)

思想:对于传统的方式来讲,当我们在一个类(A)中要使用另一个类(B)的方法时,那么我们会在A类中通过new的方式创建出B类的实例,然后调用B类中的方法,这样的话类A与类B之间的耦合比较高,使我们所不期望的;那么现在我们将实例的创建交付给Spring容器来管理,这样可以降低类与类之间的耦合,是我们所期望的;那么由传统方式到Spring容器的转变就叫做IOC;在一个类(D)中要使用另一个类(E),我们可以通过Spring容器中的bean节点中有一个property属性来设置这两个类之间的关联关系,这就叫做DI。其实DI与IOC是一回事,只是从这两个方面去考虑的。

三种注入的方式

  • 1.属性setter注入,注意在需要使用的地方加上属性的set方法属性的setter注入
  <property name="service" ref="MessageServiceImplBean"></property>
  • 2.构造注入(使用有参的构造方法进行注入)
 <constructor-arg name="defaultMsg" value="默认的String用的是value属性来充当值"/>
 <constructor-arg name="service" ref="MessageServiceImplBean"/>
  • 3.接口注入(不常用)

注解

声明bean,也就是在一个类上面加上对应的注解使这个类被spring容器来管理

  • @Component:指的是组件的意思,这是一个比较通用的,也就是不确定一个类的具体作用(充当控制器、业务层、DAO)使用它
  • @Controller:指的是控制器组件,对于一个类若果它充当的是一个控制器,那么就可以用此组件。
  • @Service:指的是一个业务组件,如果一个类要处理业务时那么就用此注解,可以设置一个指定的名称@Service(“userService”),然后在控制器中使用@Autowired与@Qualifier(“userService”)即可
  • @Repository:本意是"仓库"的意思,指的是数据访问层组件,如果要将一个类设计为DAO层的类时,则可以使用它。

声明注入,也就是建立类与类之间依赖关系

  • Spring Framework

    • @Autowired:自动装配(默认是按照类型自动装配),按照当前声明的接口类型,在容器中查找该名称对应的bean,进行自动注入(转配)。
    • @Qualifier:按照bean的名称自动装配,与@Autowired注解配合使用。按照当前指定的bean名称,在容器中查找该名称对应的bean,进行自动转配。
  • Java标准注解

    • @Resource:javax扩展包提供的注解,完成自动注入,默认是按照类型自动注入的,也可以使用name属性进行按照名称的自动注入, @Resource(name = “userService”)//这一个注解代表了上面两个的功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值