目录
外部属性文件
所需jar包下载地址:Central Repository: com/alibaba/druid/1.1.9
1--直接配置数据库信息
-
配置德鲁伊连接池
-
引入德鲁伊连接池依赖jar包
2--引入外部属性文件配置数据连接池
1.创建外部属性文件,properties格式文件,写数据库信息
2.把外部properties属性文件引入到spring配置文件中
- 先引用context名称空间
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" 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/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
注入外部值:
基于注解方式,对象创建和属性值注入
1--什么是注解
-
注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值……)
-
使用注解,注解作用在==类==上面,也可以在==方法==上,甚至==属性==上也可以。
-
使用注解的目的:简化XML配置
2--Spring针对Bean管理中创建对象提供的注解
-
@Component
-
@Service
-
@Controller
-
@Repository
**上面四个注解功能是一样的,都可以用来创建bean实例
3--基于注解方式实现对象创建
第一步:引入依赖
第二步:配置声明
第二步:开启组件扫描(给出注解所在的包类)
<!--开启组件扫描
多个包扫描的时候:
1,多个包使用逗号“ , ”分隔开
2,扫描包上层目录
-->
<context:component-scan base-package="com.atguigu.spring5.testDemo"></context:component-scan>
第三步:写好注解
//用注解创建对象,注解放在类上面
//值得注意的是:注解中的value属性值可以不写,创建对象
//当不写value值时,默认所创建的对象名称为:类对象名称(把首字母改成小写)
@Service(value = "userService")// 形式同:<bean id = "userService" class = "该类包路径"></bean>
public class UserService {
public void add(){
System.out.println("注解创建对象");
}
}
第四步:测试
@Test
public void testService1(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService user1 = context.getBean("userService",UserService.class);
System.out.println(user1);
}
开启组件扫描细节配置
使用场景:当指定扫描一个包内的全部类时,但只有部分注解类需要扫描(以注解种类划分),而部分不需要扫描,即可以进行扫描细节配置
==指定需要扫描的注解类型:==
==指定不需要的注解类型:==
基于注解方式实现属性注入
@AutoWried:根据属性类型(接口区别?)进行自动装配
-
第一步:把service和dao对象创建,在service和dao类添加创建对象的注解
//用注解创建对象,注解放在类上面 //值得注意的是:注解中的value属性值可以不写,创建对象 //当不写value值时,默认所创建的对象名称为:类对象名称(把首字母改成小写) //@Service(value = "userService")// 形式同:<bean id = "userService" class = "该类包路径"></bean> @Service public class UserService { //根据类型,注入属性值 @Autowired @Qualifier(value = "afafa")//根据名称进行注入,需配合@Autowired使用 private UserDao userDao;//接口对象,注入其实现类 public void add(){ System.out.println("注解创建对象"); userDao.add(); } }
第二步:在service注入dao对象,在service类添加dao类型注解,在属性上面添加注解
问题:当同一类注解的类的有多个时,且他们都会来自同一个类型的接口或者父类,则用接口或者父类进行上转型创建对象时,就会因为不知道创建那个子类对象,导致报错。
@Qualifier:根据属性名称进行注入
- 需要配合@AutoWried使用
@Service
public class UserService {
//根据类型,注入属性值
@Autowired
@Qualifier(value = "afafa")//根据名称进行注入,需配合@Autowired使用
private UserDao userDao;//接口对象,注入其实现类
public void add(){
System.out.println("注解创建对象");
userDao.add();
}
}
@Resource:可以根据类型注入,也可以根据名称
@Value:注入普通类型属性值
@Value中的参数value就为注入的属性值
//用注解创建对象,注解放在类上面
//值得注意的是:注解中的value属性值可以不写,创建对象
//当不写value值时,默认所创建的对象名称为:类对象名称(把首字母改成小写)
//@Service(value = "userService")// 形式同:<bean id = "userService" class = "该类包路径"></bean>
@Service
public class UserService {
//@value注解:用一般属性值注入
@Value(value = "伍绍恒")
private String name;
//
// //根据类型,注入属性值
// @Autowired
// @Qualifier(value = "afafa")//根据名称进行注入,需配合@Autowired使用
// private UserDao userDao;//接口对象,注入其实现类
//@Resource注解:可根据类型,也可以根据名称来注入
@Resource(name = "aaa")
private UserDao userDao;
public void add(){
System.out.println("注解创建对象"+name);
userDao.add();
}
}
@Repository(value = "aaa")
public class afafa implements UserDao{
@Override
public void add() {
System.out.println("1231312");
}
}
public class TestSpring5Demo {
@Test
public void testService1(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
UserService user1 = context.getBean("userService",UserService.class);
user1.add();
}
//完全注解开发
@Test
public void testService2(){
//加载配置类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService user1 = context.getBean("userService",UserService.class);
user1.add();
}
}
<?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
">
<!--开启组件扫描
1,如果扫描多个包,多个包使用逗号分隔开
2,扫描包上层目录
-->
<context:component-scan base-package="com.atguigu"></context:component-scan>
</beans>
完全注解开发
1--创建配置类,替代xml配置文件
//完全注解开发的配置类
@Configuration//作为配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.atguigu"})//等价于: <context:component-scan base-package="com.atguigu"></context:component-scan>
public class SpringConfig {
}
替代xml配置文件中的:
<context:component-scan base-package="com.atguigu"></context:component-scan>
2--编写测试类(和xml注解扫描不同)
//完全注解开发
@Test
public void testService2(){
//加载配置类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService user1 = context.getBean("userService",UserService.class);
user1.add();
}