Spring 官网:https://spring.io/
Spring 是一款 分层的Java SE/EE 的全栈、轻量级开源框架,以IOC和AOP为内核。
作为我们普通JAVA开发者,Spring 贯穿了我们整个开发生命,将来我们项目,可能100%都是用的Spring的框架
他是 我们Java 开发者 经典学习典范!
我们目前用的 基本都是 Spring 5 的版本
下载后运行结果:
save runing....
例如:
<bean id="userDao" class="com.zanglikun.dao.impl.UserDaoImpl" scope="singleton"></bean>id 不允许重复
class 全限定类名 (方便后期Spring帮我们创建对象)
Bean对象 必须存在无参构造
scope :
Bean 依赖注入的方式

getBean() API
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=740969606import com.alibaba.druid.pool.DruidDataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ResourceBundle;
/**
* @author : zanglikun
* @date : 2021/3/18 10:55
* @Version: 1.0
* @Desc : 数据源测试
*/
public class DataSourcesTest {
// c3p0 数据源
@Test
public void test1() throws PropertyVetoException, SQLException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUser("root");
dataSource.setPassword("740969606");
Connection connection = dataSource.getConnection();
System.out.println(connection); //com.mchange.v2.c3p0.impl.NewProxyConnection@30c7da1e
connection.close();
}
// druid 数据源
@Test
public void test2() throws SQLException {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUsername("root");
dataSource.setPassword("740969606");
Connection connection = dataSource.getConnection();
System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@61443d8f
connection.close();
}
// druid 配置文件抽取
@Test
public void test3() throws SQLException {
// 配置文件的名称 没有后缀
ResourceBundle rb = ResourceBundle.getBundle("jdbc");
String driver = rb.getString("jdbc.driver");
String url = rb.getString("jdbc.url");
String username = rb.getString("jdbc.username");
String password = rb.getString("jdbc.password");
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
Connection connection = dataSource.getConnection();
System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@61443d8f
connection.close();
}
}导入坐标 pom文件
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>创建配置文件 applicationContext.xml
<bean id="dataSources" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis"></property>
<property name="user" value="root"></property>
<property name="password" value="740969606"></property>
</bean>如果是解耦使用配置文件更替数据库账号和密码 就追加 彩色部分内容
引入 context的约束头 更变最终结果是
<?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">
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<bean id="dataSources" 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>测试
// 测试 Spring 容器产生数据源对象
@Test
public void test4() throws SQLException {
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
// sql 包下的
DataSource dataSource = app.getBean(DataSource.class);
Connection connection = dataSource.getConnection();
System.out.println(connection); // com.mchange.v2.c3p0.impl.NewProxyConnection@4d826d77
}spring是轻代码、重配置的框架,有些浪费时间。所以,我们就需要使用最新的趋势 — 注解 来代替 xml中的 bean 配置

在需要创建Bean的各个类上假如注解 但是Spring 无法识别在那个包下面,故需要 引入下面配置去扫包
<!-- 使用注解开发,需要配置组件扫描 这样 Spring就能知道被注解修饰的内容-->
<context:component-scan base-package="com.zanglikun"/>如果无法配置好了扫描包范围,如果仍然报错 NoSuchBeanDefinitionException
请检查注解是否使用正确!!!,在检查注入的BeanID 是否正确!!!
我们在 Service层 、Dao层、Controller层 都用这个,我们就无法知道到底当前类是那一层,所以 建议使用@Controller、@Service、@Repository 来进行区分

等价于 @Autowired + @Qualifiter
直接从容器中找 你Spring表达式的Key 例如
@Value("${jdbc.username}")
String username;直接赋值 没什么用
@Value("zhangsan")
String username;
将来 sout username 的时候 就是zhangsanSpring产生的Bean是单例还是多例
@Scope("singleton")
@Scope("prototype")用于方法上面,声明 Bean创建前执行的方法,与声明Bean销毁前执行的方法

作用范围: 类上 ,声明当前类是Spring核心配置类
作用范围: 类上,声明当前配置类扫描的区域
将当前方法的返回值 已指定的名称存储到Spring容器中
引入额外的配置文件,例如jdbc.properties
@PropertySources(classpath:jdbc.properties)
请搭配Spring原注解 @Value("${jdbc.username}") 使用从核心配置文件 引入其他配置文件
@Import([Config1.class,Config2.class])将来项目启动的时候 请使用
ApplicationContext app = new AnnotationConfigApplicationContext(核心配置类.class);这样 即搭建好了环境,将来直接注入 就可调用方法 进行测试
步骤
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>创建
import com.zanglikun.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author : zanglikun
* @date : 2021/3/19 15:01
* @Version: 1.0
* @Desc : 切记 使用Spring 测试的版本 要与当前Spring版本保持一致
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJunit {
@Autowired
UserService userService;
@Test
public void test1(){
userService.save();
}
@Test
public void test2(){
System.out.println(dataSource);
}
}完成
接下来 为了避免将来查看繁琐,请跳转到下篇文章查看
https://cloud.tencent.com/developer/article/1935519
特殊说明:
解决问题的光鲜,藏着磕Bug的痛苦。
万物皆入轮回,谁也躲不掉!
以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!