• Spring学习笔记1


    一、Spring介绍

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
    简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架
    spring有两个核心模块:

    1.控制反转 (Inversion Of Control)(IOC)容器  
      (或者叫做依赖注入dependency  injection(DI ))
    2.Spring 面向切面编程(AOP)
    spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 对象的方式


    spring在项目中的地位


    二、Spring使用

    1、导入jar包

    2、配置文件
    在根目录下新建一个xml配置文件,名字没有限制,一般为spring.xml(和SpringMVC可使用同一个配置文件)

    <?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:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
    
        <!-- 把需要管理的bean配置在 DI IOC 依赖注入/控制反转 (这个类的控制权就交由spring管壁,统一管理    反转权利)-->
    
        <!-- <bean name="udao" class="dao.impl.UserDaoImpl"></bean>
        <bean name="udao2" class="dao.impl.UserDaoImpl"></bean>
        Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: 
        No qualifying bean of type [dao.UserDao] is defined: expected single matching bean but found 2: udao,udao2
        
        
        <bean name="uservice" class="service.impl.UserServiceImpl"  autowire="byType">
            配置属性值,非简单类型用ref引用 ,简单类型(基本数据类型)用value赋值
            <property name="ud" ref="udao"></property>
            如果不 手动实例化,,提供了自动方式1byName 2byType
            <property name="aaa" value="999"></property>
            <property name="score">
                <array>
                    <value>99</value>
                    <value>88.5</value>
                    <value>77</value>
                    <value>66</value>
                </array>
            </property>
            <property name="animals">
                <list>
                    <value>东北虎</value>
                    <value>北极熊</value>
                    <value>南极企鹅</value>
                </list>
            </property>
            <property name="people">
                <set>
                    <value>张三</value>
                    <value>李四</value>
                    <value>王五</value>
                </set>
            </property>
            <property name="weather">
                <map>
                    <entry key="郑州" value="多云" />
                    <entry key="北京" value="晴" />
                    <entry key="上海" value="暴雨" />
                </map>
            </property>
            <property name="properties">
                <props>
                    <prop key="a">100</prop>
                    <prop key="b">200</prop>
                    <prop key="c">300</prop>
                </props>
            </property>
    
    
        </bean>
     -->
        <!-- 之前类与类之间的交互,需要通过在对方类中new对象的方式实现 -->
        <!-- 现在类与类之间的交互,把类交给spring,把控制权完全交给spring -->
    
    
    
    
    <!-- 注解方式完成dao层和service层的自动注入 -->
    <context:component-scan base-package="com.zy"></context:component-scan>
    
    </beans>

    3、生成对象

    UserDaoImpl

    package com.zy.dao.impl;
    import org.springframework.stereotype.Component;
    import com.zy.dao.UserDao;
    
    @Component  //这个注解就相当于在spring.xml配置了该bean
    public class UserDaoImpl implements UserDao{
        //1探究spring怎么管理bean
    
        @Override
        public void login(String name, String pwd) {
            
            System.out.println("用户名:"+name+"密码:"+pwd);
        }
    
        
    }

    UserServiceImpl

    package com.zy.service.impl;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import com.zy.dao.UserDao;
    import com.zy.dao.impl.UserDaoImpl;
    import com.zy.service.UserService;
    @Component
    //把该类纳入spring管理 public class UserServiceImpl implements UserService{ //service层要调用dao层,需要创建dao层对象,调用dao层方法 // UserDao ud = new UserDaoImpl();//不要自己动手实例化对象---会通过spring实现 @Autowired //通过spring自动实例化该对象 先按byName再按byType UserDao ud; //若不给getter setter会报 // Bean property 'ud' is not writable or has an invalid setter method public UserDao getUd() { return ud; } public void setUd(UserDao ud) { this.ud = ud; }
    String aaa;
    public String getAaa() { return aaa; } public void setAaa(String aaa) { this.aaa = aaa; } //-----------------------集合属性---数组------------------------ private double[] score; public double[] getScore() { return score; } public void setScore(double[] score) { this.score = score; } //-----------------------集合属性---List------------------------ private List<String> animals; public List<String> getAnimals() { return animals; } public void setAnimals(List<String> animals) { this.animals = animals; } //-----------------------集合属性---Set------------------------ private Set<String> people; public Set<String> getPeople() { return people; } public void setPeople(Set<String> people) { this.people = people; } //-----------------------集合属性---Map------------------------ private Map<String, String> weather; public Map<String, String> getWeather() { return weather; } public void setWeather(Map<String, String> weather) { this.weather = weather; } //-----------------------集合属性---Properties------------------------ private Properties properties;// 集合 键a=100 值b=200,现在基本被Map取代了 public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } @Override public void login(String name, String pwd) { ud.login(name, pwd); } }

    4、对象属性赋值,单例/原型模式

    上面2中xml

    DI_Scope
    scope:
    1).singleton单例模式(默认)
    一个bean标签只会生成一个对象,每次在ClassPathXmlApplicationContext中通过getBean方法获取的时候都是同一个对象
    2).prototype原型模式
    一个bean标签只会生成多个对象,每次在ClassPathXmlApplicationContext中通过getBean方法获取的时候都是同一新的对象

    三、注解方式(二中的3)

    自动注入(给某个类中的属性实例化对象)

    <bean autowire="byType"></bean>

    按类型在spring所有的bean中找合适的bean去实例化对象

    注意:如果再bean集合中发现两个及以上可用的bean就会报错

    <bean autowire="byName"></bean>

    按名字在spring所有的bean中找与属性同名的bean去实例化对象

    <!-- 注解方式完成dao层和service层的自动注入 -->

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

    类上使用

    @Component   //这个注解就相当于在spring.xml中配置了该bean---把该类纳入spring管理

    属性上使用

    @Autowired //通过spirng自动实例化该对象

    UserDao ud;

    类上 控制对象的单例/原型模式

    @Scope("prototype")

    @Scope("singleton") 默认

    package test;
    
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.zy.service.impl.UserServiceImpl;
    
    public class MyTest2 {
        @Test
        public void show(){
            ClassPathXmlApplicationContext cxc = new ClassPathXmlApplicationContext("spring.xml");    
            UserServiceImpl bean = cxc.getBean("userServiceImpl", UserServiceImpl.class);
            //注解方式默认名称为类名首字母小写
            bean.login("小白", "123456");
        }
    
    }

    //总结下,如果三层中,service调用dao层对象,controller调用service对象

    采用spring的控制反转/依赖注入 实现三层中的对象实例化

    Ioc最大的好处,把控制权交于spring,利于项目的解耦

  • 相关阅读:
    LA 6891 Money Transfers(最短路)
    Gym
    UVa 1662 Brackets Removal
    Gym 101334F Feel Good
    Gym 101334E Exploring Pyramids(dp+乘法原理)
    POJ 2112 Optimal Milking(二分+最大流)
    POJ 2115 C Looooops(模线性方程)
    UVa 11552 最小的块数(序列划分模型:状态设计)
    UVa 10534 波浪子序列(快速求LIS)
    UVa 10891 Sum游戏
  • 原文地址:https://www.cnblogs.com/qfdy123/p/11306175.html
Copyright © 2020-2023  润新知