这是一个Spring入门程序:
main()方法中并没有通过New关键字来创建UserDao接口的实现类对象,而是通过Spring容器来获取实现类对象,这就是Spring IoC容器 的工作机制。
它的流程:
1号、
package com.csdn1.entity;
public interface UserDao {
public void say();
}
2号、
package com.csdn1.entity;
public class UserDaoImplement implements UserDao{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("你已经成功创建了一个java类。。");
}
}
3号:
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.csdn1.entity.UserDaoImplement">
</bean>
<!-- more bean definitions go here -->
</beans>
4号
package com.csdn1.entity;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("beans.xml");
UserDao userDao=
(UserDao)applicationContext.getBean("userDao");
userDao.say();
}
}
依赖注入与控制反转
在传统模式下,调用者会采用“new 被调用者”的代码方式来创建被调用者这个需要使用的对象。使用Spring框架,被调用者只需要让spring容器来创建,从spring的角度看来,只是进行了依赖注入;从项目的角度看来,控制权从应用代码转移到了spring容器,发生了控制反转,所以说依赖注入和控制反转只是从两个角度描述了同一个概念。IOC的概念更广,使用了DI的程序一定使用了IOC,但是使用了IOC的程序不一定使用了DI。
set注入方法:
package com.csdn1.entity;
public interface UserService {
public void say();
}
package com.csdn1.entity;
public class UserServiceImplement implements UserService{
UserDao beServicedUser;
public void setBeServicedUser(UserDao beServicedUser) {
this.beServicedUser = beServicedUser;
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("com.csdn1.entity.UserServiceImplement:你创建了一个UserService类");
beServicedUser.say();
}
}
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.csdn1.entity.UserDaoImplement">
</bean>
<bean id="userService" class="com.csdn1.entity.UserServiceImplement">
<property name="beServicedUser" ref="userDao"></property>
</bean>
</beans>
< property >是< bean >元素的子元素,它用于调用Bean实例中的setXXX()方法完成属性赋值,从而实现依赖注入,其name属性表示Bean实例中的相应属性名,ref属性用于表示指定其属性值。
package com.csdn1.entity;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext applicationContext=
new ClassPathXmlApplicationContext("beans.xml");
UserService userService=
(UserService)applicationContext.getBean("userService");
userService.say();
}
}
使用spring容器通过实现类调用另一个实用类的方法并输出结果,是实际开发中最为常用的一种方法。
引jar包:
在项目的WEB-INF/lib目录下引入spring框架的四个核心包和第三方依赖包common-logging.jar包(四个核心包在spring框架的libs目录下)
点击这个网址下载最新版本的Spring框架spring-framework-X.X.X.release-dist.zip
点击这个网址下载最新版本的commons-logging-1.2.jar,截止博主写这篇博客为止,commons-logging这个框架包就一直停留在的2014年
添加Spring的约束配置信息:
对于5.2.9版本在:spring框架包/docs/spring-framework-reference/index.html/Core里面能找到约束信息
实验一:
利用Spring框架为自己的校园卡充值。
在Dao层建立CardDao类,编写充值方法,实现充值(在控制台显示充值金额),在Biz层建立CardBiz类,编写充值方法,调用Dao层中的充值方法,完成充值。充值金额在配置文件中输入。实现过程中不能利用new 操作来完成类的实例化。
实验2:根据自己的理解,解释IoC、DI(上面有)
四、上机操作的基本步骤(每个题目的关键代码及注释)
CardDao.java
CardDao_Implement.java
Main.java
CardBiz_Implement.java