学Android时间久了,很自然地会遇到瓶颈。
而了解下其他技术,不仅可以拓宽视野,也可以反哺Android技术的成长。
故在此开辟Android开发者学JavaWeb系列,以一个Android开发者的角度,来学习JavaEE。
Spring是什么
Spring是JavaEE的一个框架,因为JavaEE诞生年数悠久,在框架层面显得成熟,更规范化。而Android领域常年框架处于百家争鸣时代,直到最近Google JetPack的发布,框架才有了统一的曙光。故Spring的框架思想,对于Android而言,是很有借鉴意义的。
Spring以IoC和AOP为内核,提供了展现层SpringMVC和持久层Spring JDBCTemplate以及业务层事物管理等众多的企业级应用技术,并整合了开源世界众多著名的第三方框架和类库,才逐渐成为使用最多的Java EE企业应用开源框架。
Spring的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。它的源代码无疑是Java技术的最佳实践的范例。
Spring的优势
1.方便解耦,简化开发
通过Spring提供的Ioc容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
2.AOP编程的支持
通过Spring的AOP功能,方便进行面向切面编程,许多不容易用传统OOP实现的功能可以通过AOP轻松实现。
AOP是一种思想,Spring是对这种思想进行实现
3.声明式事物的支持
可以将我们从单调阀闷的事务管理代码中解脱出来,通过声明式方式灵活进行事物管理,提高开发效率和质量。
4.方便集成各种优秀的框架
比如Struts、Hibernate、Hessian、Quartz等
5.降低 JavaEE API的使用难度
Spring对JavaEE API (如JDBC、JavaMail、远程调用等)进行了封装,是这些API的使用难度大为降低。
新建Spring项目 (通过Xml依赖注入)
配置环境
首先,我们需要先下载开发软件,以及进行环境配置,详见如下
IDEA下载地址:http://www.xue51.com/soft/37767.html
maven配置 https://blog.csdn.net/qq_32588349/article/details/51461182
在pom.xml中添加如下配置
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
接着,我们就可以来编写程序了。
首先我们来创建一个UserDao接口
public interface UserDao {
public void save();
}
接着,创建其实现类UserDaoImpl
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("save running...");
}
}
接着,来创建UserService接口
public interface UserService {
void save();
}
创建其实现类UserServiceImpl
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
}
接着,在resources文件夹下创建applicationContext.xml
,这个名称可以随意,一般为applicationContext
xml中,对userDao和userService进行配置。
<?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="userDao" class="com.heiko.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.heiko.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
</beans>
最后,我们来运行程序测试一下
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//UserServiceImpl userService = app.getBean(UserServiceImpl.class);
UserServiceImpl userService = (UserServiceImpl) app.getBean("userService");
userService.save();
}
可以看到打印了日志
save running...
新建Spring项目 (通过注解依赖注入)
首先配置applicationContext.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"
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">
<!--配置组件扫描-->
<!--使用注解进行开发时,需要在ApplicationContext.xml中配置组件扫描,
作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法-->
<context:component-scan base-package="com.heiko"></context:component-scan>
</beans>
新建UserDao接口以及其实现类UserDaoImpl
public interface UserDao {
public void save();
}
@Repository("userDao")
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("save running...");
}
}
新建UserService接口以及其实现类UserServiceImpl
public interface UserService {
void save();
}
@Service("userService")
@Scope("prototype")
//@Scope("singleton")
public class UserServiceImpl implements UserService {
@Autowired //按照数据类型 从Spring容器中进行匹配
//@Qualifier("userDao") //是按照id值从容器中进行匹配的,但是此处要结合@Autowired一起用
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
}
增加配置文件SpringConfiguration
@Configuration
@ComponentScan("com.heiko") //扫描的包
public class SpringConfiguration {
}
最后,来测试下程序
public static void main(String[] args) {
ApplicationContext app = new AnnotationConfigApplicationContext(SpringConfiguration.class);
//UserServiceImpl userService = app.getBean(UserServiceImpl.class);
UserServiceImpl userService = (UserServiceImpl) app.getBean("userService");
userService.save();
}
可以看到打印了日志
save running...