发表于: 2017-08-20 22:20:35

1 1011


一、今日完成

1.因为上午睡了懒觉以及处理私事的的缘故,昨天计划学习的任务2中定义Rest接口和创建Maven web 这两个并没有去学习,在此说明。

2.学习spring IoC容器的配置和使用

1)使用IDEA新建maven项目,如欲引入Spring 首先需要向该项目添加Framework Support


2)使用基于XML的配置来创建和使用Spring容器

首先新建一个Spring Config文件(XML Bean定义文件),IDEA会自动配置相关的头文件:

然后在<Beans>元素中定义Bean:

<bean id="accountService" class="com.wiley.beginningspring.ch2.AccountServiceImpl">
  <property name="accountDao" ref="accountDao"/>
</bean>

<bean id="accountDao" class="com.jnshu.practise.***.AccountDaoInMemoryImpl">

</bean>

Bean的名称由id定义,可以通过名称来访问它。

在main方法中将XML文件作为构造函数的参数来实例化Spring容器,并且从容器内部来访问其中的Bean:

public class Main {

public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/com/wiley/beginningspring/ch2/ch2-beans.xml");
     AccountService accountService = applicationContext.getBean("accountService", AccountService.class);

     System.out.println("Before money transfer");
     System.out.println("Account 1 balance :" + accountService.getAccount(1).getBalance());
     System.out.println("Account 2 balance :" + accountService.getAccount(2).getBalance());    
     
     accountService.transferMoney(1, 2, 5.0);
     
     System.out.println("After money transfer");
     System.out.println("Account 1 balance :" + accountService.getAccount(1).getBalance());
     System.out.println("Account 2 balance :" + accountService.getAccount(2).getBalance());
  }

}

使用XML Bean定义文件创建一个ApplicationContext实例,然后调用getBean()方法执行查找,获取accountService Bean,接下来就可以愉快的调用AccountService.class下的各个成员方法了。


3)使用基于Java注解的配置来创建和使用Spring容器

将注解@Sevice和@Repository放到AccountServiceImpl.class和AccountDaoInMemoryImpl.class上,定义Spring容器所要管理的Bean

@Service
public class AccountServiceImpl implements AccountService

@Repository
public class AccountDaoInMemoryImpl implements AccountDao

再把注解@Autowired放到 AccountServiceImpl 下的setAccountDao()方法上,告诉Spring找到相应的Bean注入到目标Bean中。

接下来创建一个基于XML的Spring Bean配置文件,为了让Spring识别注解@Component的类及派生类(@Sevice和@Repository都扩展自@Component),需要将<context:compontent-scan/>元素放到配置文件里,扫描相应路径中的类,通过注解创建Bean并注入依赖项。

<?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"
  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-4.0.xsd">

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

</beans>

对比上面的头文件部分,向<Beans>元素添加了架构位置指令来启用<context:compontent-scan/>元素。

在main方法中,将Bean配置文件作为作为构造函数的参数来实例化Spring容器,这里:

public class Main {

public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/com/jnshu/pracetise/main/resource/Beans.xml");

然后就可以从Spring 容器中访问相关的Bean:

AccountService accountService = applicationContext.getBean("accountServiceImpl", AccountService.class);

System.out.println("Before money transfer");
System.out.println("Account 1 balance :" + accountService.getAccount(1).getBalance());
System.out.println("Account 2 balance :" + accountService.getAccount(2).getBalance());    

accountService.transferMoney(1, 2, 5.0);

System.out.println("After money transfer");
System.out.println("Account 1 balance :" + accountService.getAccount(1).getBalance());
System.out.println("Account 2 balance :" + accountService.getAccount(2).getBalance());

在这里可以看到,基于XML和基于注解两种办法都是使用了ClassPathXmlApplicationContext来创建Spring容器。


二、明日计划

1.补历史欠账,学习依赖注入和Bean的作用域等原理和代码实现过程;

2.学习如何去定义Rest接口;


三、遇到的问题

1.上篇日报里,师兄评论说学习的顺序搞反了,后来查了资料,使用XML是传统的配置元数据的方法,而基于注解和基于Java的方式分别是在Spring2.5和3.0中引入的新特性;

2.昨天和今天的学习内容全部是来自《Spring 入门经典》这本书,完全按照讲解和实例来理解其中的知识点,把三种方法分别是怎么用记在头脑里,并没有疑问。

3.在创建一个项目时候,将配置元素划分到多个文件里便于管理;例如beans-web.xml文件用来定义表现层所操作的Bean,beans-service.xml文件用来定义业务层所操作的Bean,beans-dao.xml文件用来定义数据访问层中所操作的Bean。


四、收获

学会了三种配置和使用Spring容器的方法,能够看懂相关代码的控制流和把这些方法使用出来。



返回列表 返回列表
评论

    分享到