Spring5入门-01-HelloSpring
一、前言
- 参考视频:遇见狂神说-Spring5
- 参考文档:官方文档
- 使用:
- IDEA 2019.3
- Maven
- Spring 5.2.9.RELEASE
- Junit 4.12
二、依赖
注意:这里用到的应该是spring-context,但是spring-webmvc由于继承的关系会有一张依赖网:
算是省心省力吧。
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<!--JUnit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
三、代码
2.1 pojo
路径
代码
package com.duzhuan.pojo;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 20:36
* @Version: 1.0
* @since: jdk11
*/
public class Hello {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
2.2 beans.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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>
The
id
attribute is a string that identifies the individual bean definition.The
class
attribute defines the type of the bean and uses the fully qualified classname.
路径
代码
<?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">
<!--使用Spring去创建对象,在Spring中称为Bean-->
<bean id="hello" class="com.duzhuan.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
</beans>
id
是bean的名字class
中放的要创建的对象(在这里应该说是给Spring托管的对象)的全限定名称<property>
中:name
的值应该是要创建的对象的属性的名称value
就不用说了,name
指定的属性的值
2.3 测试样例
路径
代码
package com.duzhuan.pojo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 20:41
* @Version: 1.0
* @since: jdk11
*/
public class HelloTest {
@Test
public void HelloTest(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello);
}
}
-
ClassPathXmlApplicationContext
是一种获取配置、使用容器的方法。这方面官方文档有比较多的说明,事实上,它可以一次读取多个配置:ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
-
context.getBean()
输入的参数就是bean
的id
2.4 测试结果
可以看到,str
的值正是之前在配置文档beans.xml
中写入的value
的值。
四、修改上个案例
上个案例(Spring5入门-00-IoC思想)中:
4.1 路径
4.2 不修改的代码
UserDao
package com.duzhuan.springLearn.dao;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 14:48
* @Version: 1.0
* @since: jdk11
*/
public interface UserDao {
void getUser();
}
UserDaoImpl
package com.duzhuan.springLearn.dao;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 14:51
* @Version: 1.0
* @since: jdk11
*/
public class UserDaoImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Get User By: ---------------------> UserDaoImpl");
}
}
UserDaoMySQLImpl
package com.duzhuan.springLearn.dao;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 15:13
* @Version: 1.0
* @since: jdk11
*/
public class UserDaoMySQLImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Get User By: ---------------------> UserDaoMySQLImpl");
}
}
UserDaoOracleImpl
package com.duzhuan.springLearn.dao;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 16:12
* @Version: 1.0
* @since: jdk11
*/
public class UserDaoOracleImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Get User By: ---------------------> UserDaoOracleImpl");
}
}
UserService
package com.duzhuan.springLearn.service;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 14:50
* @Version: 1.0
* @since: jdk11
*/
public interface UserService {
void getUser();
}
UserServiceImpl
package com.duzhuan.springLearn.service;
import com.duzhuan.springLearn.dao.UserDao;
import com.duzhuan.springLearn.dao.UserDaoImpl;
import com.duzhuan.springLearn.dao.UserDaoMySQLImpl;
/**
* @Autord: HuangDekai
* @Date: 2020/9/22 14:53
* @Version: 1.0
* @since: jdk11
*/
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
4.3 Update
路径
代码
添加dao.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="UserDaoImpl" class="com.duzhuan.springLearn.dao.UserDaoImpl"/>
<bean id="UserDaoMySQLImpl" class="com.duzhuan.springLearn.dao.UserDaoMySQLImpl"/>
<bean id="UserDaoOracleImpl" class="com.duzhuan.springLearn.dao.UserDaoOracleImpl"/>
</beans>
service.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="UserServiceImpl" class="com.duzhuan.springLearn.service.UserServiceImpl">
<property name="userDao" ref="UserDaoOracleImpl"/>
</bean>
</beans>
两个新的地方:
- 使用了不同的xml文档。
- 使用了
ref
去添加属性。
注意看的话,可以发现其实注入的是一个对象(实例)。而且是在另外一个文档注册的Bean。