概述

开发三层架构,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>

  

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

最新文章

  1. Web性能优化:What? Why? How?
  2. &lt;hr&gt;标签不止创建html水平线也可以画圆噢
  3. [转载]java int与integer的区别
  4. [C#] 與Android共舞–手機post資料給Server (转帖)
  5. windows开发hadoop文件系统权限错误
  6. YII Framework学习教程-YII的日志
  7. Delphi TcxtreeList控件说明 转
  8. mysql源码安装(5.1)
  9. Android ListView条目全选功能,不用checkbox实现!
  10. NSBundle介绍
  11. SQL列中含有换行符的查找和替换方法
  12. Spring @Scheduled 在tomcat容器里面执行两次
  13. SAP HUM 事务代码HUMO为整托做Scrap
  14. URL &amp; QRcode auto generator
  15. linux mint软件安装
  16. 20155308《网络对抗》Exp9 Web安全基础实践
  17. 【Alpha】第四次Scrum meeting
  18. mysql 数据表的增删改查 目录
  19. baidu网盘下载神器 Pandownload
  20. Debian sudo自动补全

热门文章

  1. Eclipse的application.properties文件输出中文成unicode编码
  2. Matlib
  3. docker install
  4. one-to-one 一对一映射关系(转 wq群)
  5. formated time string for file naming
  6. Hive数据倾斜解决方案
  7. Linux的内存机制(转载)
  8. Openvswitch手册(2): OpenFlow Controller
  9. Oracle 树操作、递归查询(select…start with…connect by…prior)
  10. MyBatis 源码分析系列文章合集