Spring_IOC_day07(外部属性文件、注解方式创建对象和注入、完全注解开发)

目录

外部属性文件

1--直接配置数据库信息

2--引入外部属性文件配置数据连接池

基于注解方式,对象创建和属性值注入

1--什么是注解

2--Spring针对Bean管理中创建对象提供的注解

3--基于注解方式实现对象创建

开启组件扫描细节配置

==指定需要扫描的注解类型:==

==指定不需要的注解类型:==

基于注解方式实现属性注入

@Qualifier:根据属性名称进行注入

@Resource:可以根据类型注入,也可以根据名称

@Value:注入普通类型属性值

完全注解开发

1--创建配置类,替代xml配置文件

2--编写测试类(和xml注解扫描不同)


外部属性文件

所需jar包下载地址:Central Repository: com/alibaba/druid/1.1.9

1--直接配置数据库信息

  1. 配置德鲁伊连接池
    
  2. 引入德鲁伊连接池依赖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--什么是注解

  1. 注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值……)
    
  2. 使用注解,注解作用在==类==上面,也可以在==方法==上,甚至==属性==上也可以。
    
  3. 使用注解的目的:简化XML配置
    

2--Spring针对Bean管理中创建对象提供的注解

  1. @Component
    
  2. @Service
    
  3. @Controller
    
  4. @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:根据属性类型(接口区别?)进行自动装配

  1. 第一步:把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:根据属性名称进行注入

  1. 需要配合@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();
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值