zoukankan      html  css  js  c++  java
  • 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>
    

      

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

    啦啦啦啦啦啦啦啦
  • 相关阅读:
    C#基础之事件
    C#中IQueryable和IEnumerable的区别(2)
    读取不到appsettings.json的值
    【PHP】 延时跳转
    【canvas】 绘制七巧板
    小程序项目编译失败问提解决
    windows下安装node.js
    deskgenius分区失败,分区消失,解决的过程
    IOS:重写UISlider大小解决UISlider滑动不灵敏的问题
    IOS:reason: 'invalid nib registered for identifier (PhotoCellID)
  • 原文地址:https://www.cnblogs.com/chenxiaozhi/p/9534855.html
Copyright © 2011-2022 走看看