Spring Day 1

概述

开发三层架构,web层 service服务层,dao持久层。

web层struts2配置核心过滤器/*,通过拦截器调用目标action,action中调用service层开启事务。

service业务层层用spring框架,进行增删改查用事务,Bean管理:IOC(控制反转)AOP(面向切面进行操作)

dao持久层完成持久化操作,配置对应sql语句与数据库中对象的映射关系,操作数据库。

----------------------------------------------------------------------------------

//编写测试程序,采用Spring框架的工厂方式来获取到UserService接口的具体实现类

public void demo2(){
			// 使用Spring的工厂:
			ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
			// 通过工厂获得类:
			UserService userService = (UserService) applicationContext.getBean("userService");//得到工厂里面bean对应id的值
			userService.sayHello();//接口对应实现类的方法
		}

   ApplicationContext接口,一加载对应的接口
        * 使用ApplicationContext工厂的接口,使用该接口可以获取到具体的Bean对象
        * 该接口下有两个具体的实现类
            * ClassPathXmlApplicationContext            -- 加载类路径下的Spring配置文件*****
            * FileSystemXmlApplicationContext            -- 加载本地磁盘下的Spring配置文件//不常用

核心

1. IOC和DI的概念
        * IOC        -- Inverse of Control,控制反转,将对象的创建权反转给Spring!!
        * DI        -- Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!
    
    2.  DI(依赖注入)
        * 例如:如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IOC功能时,可以通过依赖注入把该属性的值传入进来!!
        * 具体的配置如下
             

<bean id="us" class="com.itheima.demo1.UserServiceImpl">
                <property name="uname" value="小风"/>
            </bean>

  

**技术分析之Spring框架的属性注入**
    
    1. 对于类成员变量,常用的注入方式有两种
        * 构造函数注入
        * 属性setter方法注入
    
    2. 在Spring框架中提供了前两种的属性注入的方式
        1. 构造方法的注入方式,两步
            * 编写Java的类,提供构造方法
           

      public class Car {
                    private String name;
                    private double money;
                    public Car(String name, double money) {//这是构造方法
                        this.name = name;
                        this.money = money;
                    }
                    @Override
                    public String toString() {
                        return "Car [name=" + name + ", money=" + money + "]";
                    }
                }

  


            
            * 编写配置文件
                

 <bean id="car" class="com.itheima.demo4.Car">
                    <constructor-arg name="name" value="大奔"/>
                    <constructor-arg name="money" value="100"/>
                </bean>
        

  


        2. 属性的setter方法的注入方式
            * 编写Java的类,提供属性和对应的set方法即可

public class Car2 {
	
	private String cname;
	private Double price;
	
	
	public void setCname(String cname) {
		this.cname = cname;
	}
	
	public void setPrice(Double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car2 [cname=" + cname + ", price=" + price + "]";
	}
}

  


            * 编写配置文件

//采用set方法注入
   	<bean id="car2" class="com.itheima.demo4.Car2">
   		<property name="cname" value="二八自行车"/>
   		<property name="price" value="1000"/>
   	</bean>

  


        
        3. 如果Java类的属性是另一个Java的类,那么需要怎么来注入值呢?
            * <property name="name" ref="具体的Bean的ID或者name的值"/>
            * 例如:
              

   <bean id="person" class="com.itheima.demo4.Person">
                    <property name="pname" value="美美"/>
                    <property name="car2" ref="car2"/>
                </bean>

  

   如果是list集合:

<bean id="collectionBean" class="com.itheima.demo5.CollectionBean">
			<property name="arrs">
				<list>
					<value>美美</value>
					<value>小风</value>
				</list>
			</property>
		</bean>

  

---------------------------------------------------------------------------------------------------------

啦啦啦啦啦啦啦啦
原文地址:https://www.cnblogs.com/chenxiaozhi/p/9534855.html