A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangxuchang 初级黑马   /  2018-7-6 09:22  /  585 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-7-6 10:21 编辑

spring_day01
Spring概述
(一)Spring 介绍
​                Spring是一个一站式的分层轻量级框架
​(二)作用:
​                提供一种方法,管理你的业务对象
(三) Spring的体系结构
spring环境的搭建IOC和DI
applicationContext.xml  Spring核心配置文件
[JavaScript] 纯文本查看 复制代码
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
      "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
    <bean name class></bean>

Bean的获取和实例化
ApplicationContext 它是扩展 BeanFactory 接口。
BeanFactory 它采取延迟加载的方案,只有真正在 getBean 时才会实例化 Bean
在开发中我们一般使用的是 ApplicationContext,真正使用的是其实现类,
FileSystemXmlAppliCationContext 根据文件路径获取
ClassPathXmlApplicationContext 根据类路径获取
AppliCationContext它会在配置文件加载时,就会初始化Bean,并且ApplicationContext
它 提 供 不 同 的 应 用 层 的 Context 实 现 。 例 如 在 web 开 发 中 可 以 使 用
WebApplicationContext.
Bean的作用域
scope 属性:
singleton:单例 代表在 spring ioc 容器中只有一个 Bean 实例 (默认的 scope)
prototype 多例 每一次从 spring 容器中获取时,都会返回一个新的实例
request 用在 web 开发中,将 bean 对象 request.setAttribute()存储到 request 域中
session 用在 web 开发中,将 bean 对象 session.setAttribute()存储到 session 域中Bean的生命周期
对于 bean 的生命周期,我们需要关注的主要有两个方法:
1. 增强 bean 的功能可以使用后处理 Bean, BeanPostProcessor
2. 如果需要初始化或销毁操作我们可以使用 init-method destroy-method
属性注入
两种:
构造器注入:
前提必须有有参构造
<bean name="car" class="com.study.DI.Car">
    <constructor-arg index="0" type="java.lang.String" value="劳斯莱斯">        </constructor-arg>
</bean>
setter方法注入(非常重要):
前提  必须有无参构造
ref  引用其它bean 的id 或者name的值
​                引用的bean 在applicationContext中必须提前声明过
集合属性的注入:
使用专门标签进行注入 : *list  set  map  *property   *array
[Java] 纯文本查看 复制代码
public class ConnectionDemo {
    private List list;
    private Set set;
    private Map map;
    private Properties pro;
    private String[] str;   
    
    getset方法........
}
<!--集合的属性注入 -->
    <bean name="connection" class="com.study.DI.ConnectionDemo">
        <property name="list">
            <list>
                <value>list1</value>
                <value>list2</value>
                <value>list3</value>
                <value>list4</value>
            </list>
        </property>
        <property name="set">
            <set>
                <value>set1</value>
                <value>set2</value>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="hehe" value="呵呵"></entry>
                <entry key="ha" value="哈哈"></entry>
                <entry key="ww" value="威威"></entry>
                <entry key="a's'f" value="阿斯达"></entry>
            </map>
        </property> 
        <property name="pro">    //
            <props>
                <prop key="enheng">嗯哼</prop>
                <prop key="enheng1">哼</prop>
                <prop key="enheng2">嗯哼</prop>
            </props>
        </property>
        <property name="str">
            <list>
                <value>abc</value>
                <value>def</value>
                <value>ghj</value>
            </list>     
        </property>
    </bean>
名称空间
[Java] 纯文本查看 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        
    xmlns:p="http://www.springframework.org/schema/p"  //p名称空间
    xmlns:c="http://www.springframework.org/schema/c"   //c名称空间
        
    xsi:schemaLocation="
        [url=http://www.springframework.org/schema/beans]http://www.springframework.org/schema/beans[/url] [url=http://www.springframework.org/schema/beans/spring-beans.xsd]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]">
    <!-- bean definitions here -->
</beans>
p名称空间: 简化setter注入
c名称空间:简化构造器的注入

<bean id="dog2" class=""  p:name=""  p:price=""> </bean>
<bean id="person" class=""  p:name=""  p:dog-ref="dog2"> </bean>
Spring 的注解开发:
在spring中使用注解,我们必须在application.xml中 添加一个标签
<context:annotation-config />   作用是让spring中常用的一些注解生效
​<context:component-scan base-package="包的路径" />
    指定spring容器扫描的包,它包含了上面的那个功能,所以开发中一般不需要配置上面的
    注意:要扫描多个包下的注解可以写成这样的:
    1.多个包 逗号分开  com.study.dao, com.study.test
    2.扫描某个子包   com.study
类上的注解:  声明一个个bean标签
javaEE三层架构的对象才会加这种标签
​@Component("connectionDemo")   相当于<bean name="connectionDemo" class="com.study.DI.ConnectionDemo">
@Component   相当于<bean class="com.study.DI.ConnectionDemo">
    在spring2.5后 为@Component 添加了三个衍生的注解
        @Repository  用于dao层
        @Service    用于service层
        @Controller  用于view 层
    如果你明确bean的位置 就用@Component
属性上的注解:  给属性赋值
1.简单的属性赋值--基本数据类型.字符串
@Value()
2.复杂的属性:
@Autowired   具体对象**********************重点(默认参照数据类型给注入的)
@Autowired
@Qualifier("bean的名称")    两个一起  根据名称进行注入
​也可以使用下面的方式:
@Resource(name="bean 的名称")   根据名称进行注入
其它注解
描述bean的作用域
@Scope("prototype") 多例  四个取值
@Scope("singleton") 单利
@Scope("request")
@Scope("response")
指定初始化和销毁方法:
    @PostConstruct
    public void myinit(){}
        @PreDestroy
    public void myDestory(){}   
整合Junit4
导包
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguaration(locations="classpath:applicationContext.xml")
Spring 在web 开发中的应用
作用域.
Bean的作用域
Spring定义了多种Bean作用域,可以基于这些作用域创建bean,包括:
  • 单例(Singleton):在整个应用中,只创建bean的一个实例。
  • 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
  • 会话(Session):在Web应用中,为每个会话创建一个bean实例。
  • 请求(Rquest):在Web应用中,为每个请求创建一个bean实例。

流程..
面试题:IOC 和DI的区别:IOC 控制反转 :是指对象实例有Spring容器来管理
DI  依赖注入 : 在spring 创建对象的过程中,对象依赖的属性通过配置注入对象中


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马