SpringIOC的注解式开发

第一步:加入aop的依赖

第二步:在配置文件中添加context命名空间

因为我们要使用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
        ">
</beans>

第三步:在配置文件中指定扫描的包

<!--给spring框架指定要扫描那些包的类-->
 <context:component-scan base-package="com.abc.dao" />

第四步:在bean类上使用注解

@Component("cusdao")
public class cusdao {
    public void test(){
        System.out.println("cusdao test....");
    }
}

以上的这个注解代表的含义其实就是

<bean id="cusdao" class="com.abc.dao.cusdao"/>

注解中,如果不写value那么默认的value就是类名第一个字母小写的名字

本质就是说告诉spring容器包名,然后spring容器就开始在这个包下找到类,根据你写的value的值为key,spring实例的对象为value,创建一个Map<string,object>将对象放入到集合中。

为了可以更好的可读性,component注解有根据mvc架构分成了三个注解

持久层的@Repository

服务层的@Service

控制层的@Controller

***若想配置多个包,那么则只需要使用,隔开即可,例如:

<!--给spring框架指定要扫描那些包的类-->
 <context:component-scan base-package="com.abc.dao,cao.abc.service" />

对bean进行选择化的实例,根据业务要求,我们只需要实例化controller的包,那么我们应该怎么做呢?

第一种解决方案:

 <!--给spring框架指定要扫描那些包的类-->
 <!--use-default-filters="false" 这个属性如果为false就代表当前包下的bean注解全部失效-->
           <context:component-scan base-package="com.abc" use-default-filters="false">
            <!--这里我们使用context:include-filter标签可以 指定我们要放行的注解名-->
             <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
           </context:component-scan>

第二种解决方案:


<!--第二种 use-default-filters="true" 默认为true可以不写-->
     <!--外一层是先全部生效,里一层找全部失效-->
 <context:component-scan base-package="com.abc" >
  <!--这里我们使用context:include-filter标签可以 指定我们要放行的注解名-->
  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
 </context:component-scan>

负责注入的注解

@Component @Controller@Service@Repository这四个注解是用来声明bean的,声明后这些bean将被实例化。接下来我们看一下,如何给bean的属性赋值。给bean的属性赋值需要用到这些注解@value@Autowried@qualifier@resource

当属性的类型是简单类型时,可以使用value注解来进行注入

使用value注解时候我们可以不写set方法

@Value("张三")
    private String name;
    @Value("18")
    private int age;

value注解还可以加载set方法上,或者构造器方法

   @Value("张三")
    public void setName(String name) {
        this.name = name;
    }
    @Value("18")
    public void setAge(int age) {
        this.age = age;
    }
    public user(@Value("张三")String name, @Value("18") int age) {
        this.name = name;
        this.age = age;
    }

@Autowired注解可以注入非简单数据类型,被翻译为:自动连线的,或者自动装配的。单独使用auto wired注解默认是根据类型进行自动装配。

@Service("orderservice")
public class orderservice {
    @Autowired()
    private orderdao orderdao;
    public void test(){
        orderdao.save();
    }
}

autowired注解的本质就是根据类型进行自动注入,所以我们写的orderdao接口只能有一个实现类,否则就会报错,但这种情况我们也可以使用qualifier注解,里面写bean的id(唯一标识),就相当于我们的根据id来注入非简单数据类型。autowired注解可以写到构造方法上,也可以写到构造方法的参数上面去,

@Resource注解

@Resource注解也可以完成非简单类型注入,他是jdk扩展包中的,也就是jdk的一部分,所i该注解是标准注解,更加具有通用性,@Autowired注解是spring框架自己的。@Resource注解默认根据名称进行自动装配byname,若未指定name的时候,使用属性名作为name,如果找不到,就通过bytype来装配,用在属性上,setter方法上

如果你是spring6+版本,spring6不再支持javaee,它支持的是jakarEE9(Oracle把javaee改名为jakaree9)

  <!--spring6+版本引入这个依赖-->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!--spring5-版本引入这个依赖-->
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>

根据不同的spring版本,引入不同的依赖,这样才可以使用resource注解

spring的全注解开发

将配置文件用类代替,里面的信息用注解给代替实现spring全注解开发

package org.powernode.configation;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author 张鹏颖
 * 编写一个类来代替spring的配置文件
 */
//configuration注解来声明这个类是一个注解类
@Configuration
//componentScan注解来进行组件扫描,代替了xml文件中的组件扫描,我们只需要写入需要扫描的包名就可以了。
@ComponentScan({"com.abc.dao","org.powernode.dao","org.powernode.service"})
public class spring2 {

}

接着启动测试类

 @Test
    public void test1(){
        AnnotationConfigApplicationContext acpc =new AnnotationConfigApplicationContext(spring2.class);
        orderservice orderservice = acpc.getBean("orderservice", orderservice.class);
        orderservice.test();

    }

这样我们就完成基本的spring全注解开发

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值