发表于: 2017-09-18 18:56:26
1 832
今天完成的事情:
1.初步学习spring
spring是一个开源框架,是为了降低企业应用开发的复杂性而创建的,现在的应用不止在企业应用上。他是一个轻量级的控制反转IOC和面向切面aop的容器框架。
(1)从大小与开销上spring是轻量化的。
(2)通过控制反转IOC的技术来达到松耦合的目的。
(3)提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级业务进行内聚性开发。
(4)包含并管理应用对象的配置和生命周期,这个意义上是一种容器。
(5)将简单的组件配置、组合成复杂的应用,这个意义上是一个框架。
2.简单上手案例
(1)eclipse下新建maven工程spring001,工程目录如下
其中有DAO接口及其实现类和service接口和其实现类。
(2)InjectionDAO接口指定义类一个save的抽象方法,其实现类InjectionDAOImpl具体定义save方法的方法体。
package com.imooc.ioc.injection.dao;
public interface InjectionDAO {
public void save(String arg);
}
实现类
package com.imooc.ioc.injection.dao;
public class InjectionDAOImpl implements InjectionDAO{
public void save(String arg) {
//模拟数据库保存操作
System.out.println("保存数据:"+arg);
}
}
(3)InjectionService接口及其实现类
package com.imooc.ioc.injection.service;
public interface InjectionService {
public void save(String arg);
}
实现类
package com.imooc.ioc.injection.service;
import com.imooc.ioc.injection.dao.InjectionDAO;
public class InjectionServiceImpl implements InjectionService{
private InjectionDAO injectionDAO;
// 构造器注入
public InjectionServiceImpl(InjectionDAO injectionDAO) {
this.injectionDAO= injectionDAO;
}
//设置注入 set方法
/*public void setInjection(InjectionDAO injectionDAO) {
this.injectionDAO = injectionDAO;
}*/
//模拟业务操作
public void save(String arg) {
System.out.println("Service接收参数: "+arg);
arg=arg+":"+this.hashCode();
injectionDAO.save(arg);
}
}
(4)Bean文件的配置
spring框架就是把对象的创建和维护交给外部容器IOC来做,这样用户在使用应用的时候不需要关心对象本身只需要关注接口提供的功能,在IOC中所有的对象称为bean。DI(依赖注入)就是IOC实现的一种方式。下面贴出此案例的bean.xml文件配置。
<?xml version="1.0" encoding="UTF-8"?>
<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="injectionservice" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<property name="injectionDAO" ref="injectionDAO"></property>
</bean>-->
//构造器注入依赖
<bean id="injectionservice" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
</bean>
<!-- 配置DAO -->
<bean id="injectionDAO" class="com.imooc.ioc.injection.dao.InjectionDAOImpl">
</bean>
</beans>
(5) 创建测试Main.java类
package com.imooc.ioc.injection.dao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.imooc.ioc.injection.service.InjectionService;
public class Main {
public static void main(String args[]) {
ApplicationContext context =new ClassPathXmlApplicationContext("spring-injection.xml");
InjectionService service=(InjectionService) context.getBean("injectionservice");
service.save("这是要保存的数据");
}
}
运行结果
九月 18, 2017 7:11:29 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@300ffa5d: startup date [Mon Sep 18 19:11:29 CST 2017]; root of context hierarchy
九月 18, 2017 7:11:29 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-injection.xml]
Service接收参数: 这是要保存的数据
保存数据:这是要保存的数据:1216590855
明天的计划:
1.根据这两天学习的案例把任务一第17.18.19。
问题:
1.在上述spring学习案例中bean文件依赖注入中用设值方法注入时运行测试文件总是报错显示:
Bean property 'injectionDAO' is not writable or has an invalid setter method.
解决方法:bean.xml中关键字
<property name="injectionDAO" ref="injectionDAO"></property>
这里的injectionDAO是InjectionserviceImli类的成员变量,必须在方法体设置set方法,这样在类在实例化中才InjectionserviceImli能对injectionDAOImli实例化。
//设置注入 set方法
public void setInjection(InjectionDAO injectionDAO) {
this.injectionDAO = injectionDAO;
}
收获:
1.初步学习了spring的概念及实现方法,spring最关键的作用就是将对象的创建和维护交给IOC来实现。
2.这里面各种类和接口的调用关系及实例过程中对初始化的过程要了解清楚。
评论