spring配置基于xml和注解

 

 

Spring中的工厂

ApplicationContext:

ApplicatioContext接口有两个实现类:

ClassPathXmlApplicationContext :加载类路径下Spring的配置文件.

FileSystemXmlApplicationContext :加载本地磁盘下Spring的配置文件.

BeanFactory:

ApplicationContext是BeanFactory的子类,功能比beanFactory更完善。

BeanFactory和ApplicationContext的区别:

BeanFactory :是在getBean的时候才会生成类的实例.

ApplicationContext :在加载applicationContext.xml时候就会创建.

 

Spring配置文件中提示的配置

开发时需要去查看

Spring的相关配置

id属性和name属性标签的配置

没有id时,可以用name代替,id不能有特殊字符,名字可以有。

scope属性:Bean的作用范围.

* singleton :默认值,单例的.

* prototype :多例的.

* request :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

* session :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

* globalSession :WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

Bean的生命周期的配置

通过配置<bean>标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

Spring的Bean的管理XML的方式

Spring的Bean的属性注入

【构造方法的方式注入属性】

<!-- 第一种:构造方法的方式 -->

<bean id="car" class="cn.itcast.spring.demo4.Car">

<constructor-arg name="name" value="保时捷"/>

<constructor-arg name="price" value="1000000"/>

</bean>

 

【set方法的方式注入属性】

<!-- 第二种:set方法的方式 -->

<bean id="car2" class="cn.itcast.spring.demo4.Car2">

<property name="name" value="奇瑞QQ"/>

<property name="price" value="40000"/>

</bean>

​​​​​​​Spring的属性注入:对象类型的注入:

<!-- 注入对象类型的属性 -->

<bean id="person" class="cn.itcast.spring.demo4.Person">

<property name="name" value="会希"/>

<!-- ref属性:引用另一个bean的id或name -->

<property name="car2" ref="car2"/>

</bean>

​​​​​​​名称空间p的属性注入的方式:Spring2.x版本后提供的方式.

第一步:引入p名称空间

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:p="http://www.springframework.org/schema/p"

    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">

第二步:使用p名称空间.

    * 普通属性:     p:属性名称=””

    * 对象类型属性: p:属性名称-ref=””



<!-- p名称空间的属性注入的方式 -->

<bean id="car2" class="cn.itcast.spring.demo4.Car2" p:name="宝马7" p:price="1200000"/>

<bean id="person" class="cn.itcast.spring.demo4.Person" p:name="思聪" p:car2-ref="car2"/>

SpEL的方式的属性注入:Spring3.x版本后提供的方式.

SpEL:Spring Expression Language.

语法:#{ SpEL }

<!-- SpEL的注入的方式 -->

<bean id="car2" class="cn.itcast.spring.demo4.Car2">

<property name="name" value="#{'奔驰'}"/>

<property name="price" value="#{800000}"/>

</bean>



    <bean id="person" class="cn.itcast.spring.demo4.Person">

     <property name="name" value="#{'冠希'}"/>

     <property name="car2" value="#{car2}"/>

    </bean>



<bean id="carInfo" class="cn.itcast.spring.demo4.CarInfo"></bean>



  引用了另一个类的属性

<bean id="car2" class="cn.itcast.spring.demo4.Car2">

<!-- <property name="name" value="#{'奔驰'}"/> -->

<property name="name" value="#{carInfo.carName}"/>

<property name="price" value="#{carInfo.calculatePrice()}"/>

</bean>

​​​​​​​注入复杂类型:

<!-- Spring的复杂类型的注入===================== -->

<bean id="collectionBean" class="cn.itcast.spring.demo5.CollectionBean">

<!-- 数组类型的属性 -->

<property name="arrs">

<list>

<value>会希</value>

<value>冠希</value>

<value>天一</value>

</list>

</property>



<!-- 注入List集合的数据 -->

<property name="list">

<list>

<value>芙蓉</value>

<value>如花</value>

<value>凤姐</value>

</list>

</property>



<!-- 注入Map集合 -->

<property name="map">

<map>

<entry key="aaa" value="111"/>

<entry key="bbb" value="222"/>

<entry key="ccc" value="333"/>

</map>

</property>



<!-- Properties的注入 -->

<property name="properties">

<props>

<prop key="username">root</prop>

<prop key="password">123</prop>

</props>

</property>

</bean>

​​​​​​​Spring的分配置文件的开发

一种:创建工厂的时候加载多个配置文件:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

二种:在一个配置文件中包含另一个配置文件:

<import resource="applicationContext2.xml"></import>

Spring的Bean管理:(注解方式)

​​​​​​​配置注解扫描

<!-- Spring的注解开发:组件扫描(类上注解: 可以直接使用属性注入的注解) -->

<context:component-scan base-package="com.itheima.spring.demo1"/>

在相关的类上添加注解​​​​​​​

@Component(value="userDao")

public class UserDaoImpl implements UserDao {

@Override

public void sayHello() {

System.out.println("Hello Spring Annotation...");

}

}

 

  1. Spring的Bean管理的中常用的注解:
    1. @Component:组件.(作用在类上)

Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的)

* @Controller :WEB层

* @Service :业务层

* @Repository :持久层

 

这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强

​​​​​​​属性注入的注解:(使用注解注入的方式,可以不用提供set方法.)

@Value :用于注入普通类型.

@Autowired :自动装配:

* 默认按类型进行装配.

* 按名称注入:

* @Qualifier:强制使用名称注入.

@Resource相当于:

* @Autowired和@Qualifier一起使用.

​​​​​​​Bean的作用范围的注解:

@Scope:

* singleton:单例

* prototype:多例

​​​​​​​Bean的生命周期的配置:

@PostConstruct :相当于init-method

@PreDestroy :相当于destroy-method

  1. Spring的Bean管理的方式的比较:

 

XML和注解:

* XML :结构清晰.

* 注解 :开发方便.(属性注入.)

实际开发中还有一种XML和注解整合开发:

* Bean有XML配置.但是使用的属性使用注解注入.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值