袁艺

个人站

欢迎来到我的个人站~


Spring入门(一)

介绍

Spring是一个开源框架,spring是一个轻量级的Java开发框架。一站式框架,核心是控制反转IOC和面向切面AOP

三层结构:

WEB层:springMVC

业务层:Bean管理(IOC)

持久层:spring的jdbc模板ORM模板用于整合其他的持久层框架

入门案例

userDAO类:

public interface UserDAO {
    public void sayHello();
}

public class UserDAOImpl implements UserDAO {
    @Override
    public void sayHello() {
        System.out.println("你好啊,spring");
    }
}

配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
       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">

    <bean id="userDao" class="com.spring.dao.UserDAOImpl"/>
</beans>

测试类:

 public void demo1(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");
        UserDAO userDAO= (UserDAO) applicationContext.getBean("userDao");
        userDAO.sayHello();
    }

DI和IOC

Spring的相关配置

id和name属性

id:给bean起个名字,再约束中采用ID的约束

name:没有id约束,如果没有id可以将name作为id

scope属性

bean的作用范围

singleton:默认的,单例的

prototype:多例的

request:将对象存入request中

session:将对象存入session中

Bean的生命周期

通过配置标签上的init-method作为bean的初始化的时候执行的方法,配置destory-method作为bean的销毁的时候执行的方法。

销毁方法想要执行,需要是单例创建的bean而且在工厂关闭的时候,bean才会被销毁

Spring生成Bean的时候三种方式

  1. 无参的构造方法的方式

    <bean id="userDao" class="com.spring.dao.UserDAOImpl"/>
    
  2. 静态工厂实例化的方式

    提供一个工厂类
    public class BeanFactory {
        public static UserDAO getBean(){
            return new UserDAOImpl();
        }
    }
     <bean id="bean2" class="com.spring.dao.BeanFactory" factory-method="getBean"/>    
    
  3. 实例工厂实例化的方式

    提供bean的实例工厂   
    public UserDAO getBean2(){
            return new UserDAOImpl();
        }
    
    <bean id="beanFactory" class="com.spring.dao.BeanFactory"/>
        <bean id="bean3" factory-bean="beanFactory" factory-method="getBean2"></bean>
    

Spring的Bean的属性注入

  • 构造方法的方式

    <bean id="car" class="com.spring.dao.Car">
            <constructor-arg name="name" value="很好"/>
            <constructor-arg name="price" value="10000"/>
        </bean>
    
  • set方法的方式注入属性

        <bean id="car2" class="com.spring.dao.Car">
            <property name="name" value="奥迪"/>
            <property name="price" value="1000"/>
        </bean>
    
  • 对象类型的注入

       <bean id="person" class="com.spring.dao.Person">
            <property name="name" value="mike"/>
            <property name="car" ref="car2"/>
        </bean>
    
  • 数组类型

    <property name="addr">
                <list>
                    <value>北京</value>
                    <value>南京</value>
                </list>
            </property>
    
  • List集合

            <property name="phone">
                <list>
                    <value>123123</value>
                    <value>324324</value>
                </list>
            </property>
    
  • Map集合

            <property name="cla">
                <map>
                    <entry key="1" value="2班"></entry>
                </map>
            </property>
    
  • properties

            <property name="account">
                <props>
                    <prop key="username">root</prop>
                    <prop key="pwd">123</prop>
                </props>
            </property>