Spring的基本使用笔记

个人对Spring的初级理解:

        由于程序开发过程中对象之间的依赖关系导致功能之间耦合度太高,不利于代码维护和功能添加,功能独立,且之间耦合度低显然利大于弊,Spring作为一个管理Bean的容器,无论是基于xml还是annotation的方式开发,都是根据唯一的一个标识取得对应的类"全限定名称"通过反射创建对象的,这个创建对象的工作交给Spring中的Bean工厂,这样使用Bean的通过工厂取得即可,也就降低了原来的强耦合关系。这指的就是IOC(Inversion of control)。

        不是非要使用这个框架才可以开发的,传统的采用合理的设计模式也可以达到一样的效果,只不过框架是将那些不变性的操作做了封装,使开发人员只注重业务逻辑的实现,提高开发效率罢了。

Spring基于xml的使用:
    //spring可以根据对象的作用范围(singleton/prototype)来自动选择延迟还是立即创建对象

    1.Spring创建对象(IoC)的三种方式:
        a.使用默认的构造函数创建,bean标签只配置id和class属性
        b.使用工厂的实例方法创建对象必须先有对象才能调用方法
        c.使用工厂的静态方法创建对象
    2.bean对象的作用范围
        默认是单例的
        使用scope属性:指定bean的作用范围
            取值:singleton、prototype、request、session、global-session
            request作用于web应用的请求范围
            session作用于web应用的会话范围
            global-session作用于集群环境的会话范围(全局会话范围,不是集群时就是session)
    3.spring的注入方式:
        a.构造方法注入
        b.set方法注入
            <bean id="setService" class="com.service.impl.UserServiceImpl">
                <property name="name" value="mia"/>
                <property name="age" value="23"/>
                <property name="birthday" ref="time"/>
            </bean>
        复杂类型数据的注入
            private String[] strings;
            private List<String> list;
            private Set<String> set;
            private Map<String,String> map;
            private Properties properties;

            用于给List结构注入的标签有:
                list,array,set
            用于给Map结构注入的标签有:
                map,props
            【注】只要结构相同,标签是可以根据存储数据的要求互换的,平时记住有list和map
两种结构就ok
    4.bean对象的生命周期
            单例:
                出生:容器创建对象创建
                活着:容器存在对象存在
                死亡:容器销毁对象销毁
            多例:
                出生:使用时容器创建
                活着:使用时的会存货
                死亡:当对象长时间不用GC回收
    小结:spring Ioc是为了降低类之间的依赖关系,将bean的管理交给spring容器去管理,所以
    称为控制反转,spring DI相当于使用有参构造需要传入参数的作用,只是交给了spring通过配置
    来注入数据,可以通过构造器注入也可通过set方法注入

Spring基于注解的使用,暂且分为一下几种注解:
    
    对于注解使用,如果不知道改写什么属性,点开源码看一下就知道,或者查一下,多查多总结。

    1.注入对象
        @Component和它相同作用的注解有@Controller @Service @Repository
        @Autowired是自动根据类型注入(作用于类或属性)绕过key直接在容器中找与它类型一致的,如果有多个可以匹配的,会先根据变量名匹配注解的值,如果都不匹配会报错
        @Qualifier可以指定实现类,但必须配合@Autowired使用
        @Resource(name = "userDao2")可单独使用
        注:以上几种只能注入bean类型的数据,对于基本类型和String是无能为力的,集合类型的注入只能通过xml实现
    2.注入数据
        @Value用于注入基本类型和String类型的数据,它可以使用SpEL(SpringEL表达式)
            语法${表达式}
    3.作用范围
        @Scope用于指定bean的范围
    4.生命周期
        @PreDestroy指定销毁方法
        @PostConstruct指定初始化方法

对于EL表达式的区分:

        Jsp、Mybatis、Spring中都有,谁的场景就是谁的EL表达式。

再提一下Mybatis中${}和#{}的效果不同点在于$是直接取值,而#取值会加上""。
    比如age = 5,age = ${name},那么age = 5;
    比如age = 5,age = #{name},那么age = "5";

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值