第一步:加入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全注解开发