spring基础(IOC)

spring

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核.Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

优点

方便解耦,简化开发
通过 Spring提供的 IoC容器,可以将对象间的依赖关系交由 Spring进行控制,避免硬编码所造
成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可
以更专注于上层的应用。
AOP 编程的支持
通过 Spring的 AOP 功能,方便进行面向切面的编程,许多不容易用传统OOP 实现的功能可以
通过 AOP 轻松应付。
声明式事务的支持
可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,
提高开发效率和质量。
方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可
做的事情。
方便集成各种优秀框架
Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz
等)的直接支持。
低 降低 JavaEE API 的使用难度
Spring对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的
使用难度大为降低。
spring基础(IOC)_第1张图片

引入spring

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-contextartifactId>
    <version>5.0.2.RELEASEversion>
dependency>

创建对象,改变作用范围,生命周期


    

    

    

    

    
    <bean id="accountService" class="com.cc.service.impl.AccountServiceImpl"
          scope="prototype" init-method="init" destroy-method="destroy">bean>

基于注解

添加context约束

    <context:component-scan base-package="com.cc">context:component-scan>

把当前对象存入spring容器,和标签功能一样,value用于指定id,默认值当前类名,且首字母小写,四个功能一样

@Component

@Controller 用于表现层

@Service 用于业务层

@Repository 用于持久层

//和生命周期相关
//他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
//PreDestroy
//作用:用于指定销毁方法
//PostConstruct
//作用:用于指定初始化方湖

@Scope()
//指定bean的作用范围
//value 指定范围取值 singleton单例 prototype多例 默认单例

依赖注入


    
    <bean id="accountService" class="com.cc.service.impl.AccountServiceImpl">
        <constructor-arg name="name" value="cc">constructor-arg>
        <constructor-arg name="age" value="18">constructor-arg>
        <constructor-arg name="birthday" ref="now">constructor-arg>
        直接写日期的话无法识别为日期格式,识别为字符串格式
    bean>
    
    <bean id="now" class="java.util.Date">bean>
    
    <bean id="accountService2" class="com.cc.service.impl.AccountServiceImpl2">
        <property name="name" value="TEST" >property>
        <property name="age" value="21">property>
        <property name="birthday" ref="now">property>
    bean>
    
    <bean id="accountService3" class="com.cc.service.impl.AccountServiceImpl3">
        <property name="  mySet">
            <set>
                <value>AAAvalue>
                <value>BBBvalue>
                <value>CCCvalue>
            set>
        property>

        <property name="myStrs">
            <array>
                <value>AAAvalue>
                <value>BBBvalue>
                <value>CCCvalue>
            array>
        property>

        <property name="myList">
            <list>
                <value>AAAvalue>
                <value>BBBvalue>
                <value>CCCvalue>
            list>
        property>

        <property name="myProps">
            <props>
                <prop key="testC">cccprop>
                <prop key="testD">dddprop>
            props>
        property>

        <property name="myMap">
            <map>
                <entry key="testA" value="aaa">entry>
                <entry key="testB">
                    <value>BBBvalue>
                entry>
            map>
        property>
    bean>

//@Autowired
//自动按照类型注入,和功能一致,只要容器有一个bean对象和要注入的类型匹配,
// 就可以了注入,可以写在变量上,也可以写在方法上,如果有两个bean对象和注入类型一致,则找变量名相同的,若没有报错
//@Qualifier(“accountDao”)
//按照类型基础上,安名称注入,给类成员注入不能单独使用,要配合autowrite使用,给方法参数注入时可以
//value用于指定注入bean的id
@Resource(name = “accountDaoImpl”)
//按照bean的id注入
//name用于指定id

// 集合类型注入只能通过xml实现
@Value("")

//注入基本类型和String类型

//value指定数据的值,可以使用spring的el表达式 ${表达式}

你可能感兴趣的:(java,框架)