上次主要记录了Spring依赖注入中的对象依赖注入
本次从普通属性的注入开始
一、 知识记录
1. 普通属性注入
对于普通属性就是类似于private int age; private String name
普通属性注入过程(还是以UserDao和Uservice为基础进行记录)
(1)set方法
UserDaoImpl类
public class UserDaoImpl implements UserDao{
private String username;
private int age;
public void setUsername(String username){
this.username=username;
}
public void setAge(int age){
this.age=age;
}
public void setUsername(String name,int age){
this.name=name;
this.age=age;
}
@Override
/*对接口UserDao的实现*/
public void save() {
System.out.println(username+"======"+age);
System.out.println("save running.....");
}
}
applicationContext配置文件
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl">
<property name="username" value="zhangsan"></property>
<property name="age" value="18"></property>
</bean>
<bean id="userService" class="com.wxy.service.impl.UserServiceImpl" >
<property name="userDao" ref="userDao"></property>
</bean>
<!--这里的name指的是你的方法的属性的名字,也就是这里的setUserDao中的除了set的名字,即为userDao(首字母要变成小写字母)-->
<!--此处的ref就是你要配置的东西,就是这里的userDao(来源于上面的<bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl" >)-->
<!--这里因为是将核心层封装到业务层,所以需要将userDao装入userService中,同时,userService中需要使用set方法传递userDao对象-->
</beans>
UserServiceImpl类
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public UserServiceImpl() {
}
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
//将userDao进行一个传输
public void save() {
userDao.save();
System.out.println("running.....");
}
}
(2)构造器方式
同上方法,此处只记载userDaoImpl和applicationContext
public class UserDaoImpl implements UserDao{
private String username;
private int age;
public UserDaoImpl(String username, int age) {
this.username = username;
this.age = age;
}
@Override
/*对接口UserDao的实现*/
public void save() {
System.out.println(username+"======"+age);
System.out.println("save running.....");
}
}
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl">
<property name="username" value="zhangsan"></property>
<property name="age" value="18"></property>
</bean>
<bean id="userService" class="com.wxy.service.impl.UserServiceImpl" >
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
</beans>
2. 集合依赖注入
主要有Map、List、Properites的使用
UserDaoImpl类
public class UserDaoImpl implements UserDao {
private List<String> strList;
private Map<String,User> strMap;
peivate Properites properits;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
}
applicationContext配置文件
<!-- List的配置 -->
<bean id="userDao" class="com.wxy.dao.impl.UserDaoImpl" >
<property name="strList">
<list>aa</list>
<list>bb</list>
</property>
<property name="strMap">
<map>
<entry key="u1" value-ref="user1"></entry>
<!--这里使用value-ref的原因是引用Map类型的对象-->
</map>
</property>
<property name="properties">
<props>
<prop key="p1" > ppp1 </prop>
</props>
</property>
</bean>
<bean id="user1" class="com.wxy.domain.User">
<property name="zhangsan" value="北京"> <property>
</bean>
<bean id="userService" class="com.wxy.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
3. import标签的使用
在Spring开发中,工作量十分的巨大,如果将配置文件全部配置在一个文件中就会导致读取和维护困难,那么我们可以使用分为多个配置文件并最后将其他的文件导入到主配置文件中的方法!
<import resource="XXX.xml">
4. Spring相关的API
applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器·中的Bean对象
白色的是接口,黄色的是实现类
ApplicationContext的实现类
(1)ClassPathXmlApplicationContext
从类的根路径下加载配置文件,推荐使用
(2)FileSystemXmlApplicationContext
从磁盘路径上加载配置文件,配置文件可以在磁盘的任何位置
(3)AnnotationConfigApplicationContext
当使用注解配置容器的时候,需要使用此类来创建spring容器。它用来读取注解。
5. Spring相关API之getBean方法的使用
底层源码
如果容器中存在某一类型的对象有多个的时候使用id但是只有一个的时候可以使用id也可以使用获取类型的方式
6. Spring配置数据源
(1) 数据源(连接池)的作用
①提高程序性能
②事先实例化数据源,初始化部分连接资源
③使用连接资源时从数据源中获取
④使用完毕之后将连接资源归还给数据源
常见的数据源:DBCP、C3P0、BoneCP等
(2)手动配置数据源
现在pom.xml中进行依赖的配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>com_wxy_ioc_annp</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!--下面这三个不知道为什么配置的时候不提示,而且有些配置还会出错,我就在网上找了一些多数人用的配置,替换之后就好了-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
(3)测试手动创建c3p0数据源和druid数据源
public class DataSourceTest {
@Test
public void test2() throws Exception {
DruidDataSource dataSource=new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8");
dataSource.setUsername("root");
dataSource.setPassword("546871893wxy.");
DruidPooledConnection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
@Test
//测试手动创建c3p0数据源
public void test1() throws Exception {
ComboPooledDataSource dataSource=new ComboPooledDataSource();
//这样还不可以使用,因为还没设置基本的研究参数
//设置基本的研究参数
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/girls?characterEncoding=UTF8&autoReconnect=true&useSSL=false");
dataSource.setUser("root");
dataSource.setPassword("");
//获取资源
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
}
(4)使用上面的方式我们会发现十分的复杂,比如我们需要修改数据库等参数的时候就要找到源文件,这是十分的麻烦的,我们可以将这些参数封装在properites文件中
jdbc.properites
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=
测试类
@Test
//测试手动创建c3p0数据源(加载properties配置文件)
public void test3() throws Exception {
//读取配置文件
//相对于类加载路径的地址
ResourceBundle resourseBundle=ResourceBundle.getBundle("jdbc");
String driver=resourseBundle.getString("jdbc.driver");
String url=resourseBundle.getString("jdbc.url");
String name=resourseBundle.getString("jdbc.username");
String password=resourseBundle.getString("jdbc.password");
//创建数据源对象,设置连接参数
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass(driver);
dataSource.setJdbcUrl(url);
dataSource.setUser(name);
dataSource.setPassword(password);
Connection connection=dataSource.getConnection();
System.out.println(connection);
connection.close();
}
(5)Spring配置数据源
将Datasourse的创建交给Spring容器去进行
我们先来一起回顾Spring容器创建的步骤
①导入Spring的基本依赖
②创建Dao接口
③创建Spring核心配置文件
(在这里不用创建Dao实现类,因为我们使用jar包中的文件)
然后我们就先导入依赖
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.17.RELEASE</version>
<scope>compile</scope>
</dependency>
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8"></property>
<property name="user" value="root"></property>
<property name="password" value=""></property>
</bean>
</beans>
测试类
public void test4() throws Exception {
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
DataSource dataSource = app.getBean(DataSource.class);
Connection connection=dataSource.getConnection();
System.out.println(connection);
connection.close();
}
(6)在Spring中加载properites配置文件
添加context命名空间,用来加载jdbc.properties
<?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.xsd">
<!--加载外部的properites文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
</beans>
7. Spring的注解开发
spring是轻代码但是重配置的框架,配置比较繁重影响开发效率,所以注解开发是一种趋势,注解替代xml文件可以简化配置,提高开发效率
Spring原始注解主要是替代<Bean>的配置
昨天的记录到这里,忘记发布了,哈哈哈
日常一句美文:
For the mind disturbed the still beauty of dawn is nature's finest balm.
对于烦恼的人而言,黎明的寂静之美是大自然最好的慰藉
每日好看的图片分享: