Spring注解(annotation)以及Spring 配置类

目录

一、Spring注解(annotation)

1.spring的配置

 2、Spring注解

2.1 注入类

 2.2 注入基本数据

3.3 其他注解

 二、Spring 配置类

1.spring的配置

2.  3.0配置类语法


一、Spring注解(annotation)
1.spring的配置
  • spring2.5前==xml
  • spring2.5后==xml+annotation
  • spring3.0后==annotation+JavaConfig配置类

spring2.5后=xml+annotation

目的优化一下代码:

<bean id="" class="" init-method="" destroy-method="" scope="" autowire="">
<property></property>
<constructor-arg></constructor-arg>
</bean>
 2、Spring注解

        就是将本来在xml中的bean引用一个类的实例换成在类上面的注解来完成一些配置文件的功能来减少配置文件的使用。

2.1 注入类

替换:<bean id="" class=""></bean>

位置:类

语法:

@Component

eg:Class User{}

<bean id="user" class="com.apesource.包.User"></bean>

||等价于||

@Component

Class User{}

@Repository=====>注入数据访问层

@Service========>注入业务层

@Controller=====>注入控制层

        以上三个注解与@Component功能语法一致

@Repository
//@Primary
public class UserDaoImp implements IUserDao {
 
    public void save() {
        System.out.println("===dao的新增方法===");
    }
}
 
@Controller("controller")
public class UserControllerImp implements IUserController {
    @Autowired//向spring容器查找IUserService类型的对象实例,并通过构造方法注入给修饰的属性
    IUserService service;
 
    public void save() {
        System.out.println("===controller的新增方法===");
        service.save();
    }
}
 
 
@Service
public class UserServiceImp implements IUserService{
 
//    @Autowired
//    @Qualifier(value = "UserDaoIml")
    @Resource(name = "userDaoImp")
    IUserDao dao;
    public void save() {
        System.out.println("===service的新增方法===");
        dao.save();
    }
}

语法@Component(value="注入容器中的id,如果省略id为类名且首字母小写,value属性名称可以省略")

@Component(value="stu")
public class Student {
}

 <context:component-scan base-package=""></context:component-scan>功能一致

含义:扫描所有被@Component注解所修饰的类,注入容器

<!--扫描注解-->
<context:component-scan base-package="com.ztt"></context:component-scan>
 2.2 注入基本数据

@Value

含义:注入基本数据

替换:<property></property>

修饰:成员变量或对应的set方法

语法@Value("数据内容")

           @Value("${动态获取}")

//    @Value("xn")
//    private String stuName;
//    @Value("165")
//    private int stuHeight;
 
@Value("${msg1}")
private String stuName;
@Value("${msg2}")
private int stuHeight;

 <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

<!--加载资源文件-->
<context:property-placeholder location="classpath:message.properties"></context:property-placeholder>

@Autowired

语法:@Autowired(required = "true-默认、false、是否必须进行装配")

修饰:成员变量或对应的构造方法

含义:按照通过set方法进行“类型装配”,set方法可以省略

@Autowired//向spring容器查找IUserService类型的对象实例,并通过构造方法注入给修饰的属性
IUserService service;

注意:

1.默认是按照类型装配且同set方法

2.若容器中有一个类型可以与之匹配则装配成功,若没有一个类型可以匹配则报错

NoSuchBeanDefinitionException

3.若容器中有多个类型可以与之匹配,则自动切换为按照名称装配,若名称没有对应,则报错

NoUniqueBeanDefinitionException

3.3 其他注解

@Primary

含义:首选项,当类型冲突的情况下,此注解修饰的类被列为首选(备胎扶正)

修饰:类

注意:不能单独使用,必须与@Component....联合使用

@Repository
//@Primary
public class UserDaoImp implements IUserDao {
 
    public void save() {
        System.out.println("===dao的新增方法===");
    }
}

@Qualifier(value="名称")

含义:按照名称装配

修饰:成员变量

注意:不能单独使用,必须与@Autowired联合使用

@Resource(name="名称")

含义:按照名称装配

修饰:成员变量

注意:单独使用

//    @Autowired
//    @Qualifier(value = "UserDaoIml")
@Resource(name = "userDaoImp")
IUserDao dao;

@Scope

含义:配置类的作用域

修饰:类

注意:不能单独使用,必须与@Component....联合使用

@Scope("prototype")

@Scope("singleton")

@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)

@Component
@Scope("singleton")
public class Teacher {
}

 @PostConstruct:初始化,修饰方法

替换:init-method

@PreDestroy:销毁,修饰方法

替换:destory-method

@PostConstruct
public void doinit(){
    System.out.println("初始化方法");
}
@PreDestroy
public void dodestory(){
    System.out.println("销毁方法");
 
}
注意:记得在测试类里面写applicationContext.close();
 二、Spring 配置类
1.spring的配置
  • spring2.5前==xml
  • spring2.5后==xml+annotation
  • spring3.0后==annotation+JavaConfig配置类
2.  3.0配置类语法


spring中的新注解

@Configuration

作用:指定当前类是一个配置类

细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。

@ComponentScan

作用:用于通过注解指定spring在创建容器时要扫描的包

属性:value:它和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包。

替换:<context:component-scan base-package="com.apesource"></context:component-scan>

@PropertySource

作用:用于指定properties文件的位置

属性:value:指定文件的名称和路径。

配合@Value使用

替换:<context:property-placeholder location="classpath:message.properties"></context:property-placeholder>

@Configuration
@ComponentScan(basePackages = "com.ztt")
@PropertySource(value = "classpath:message.properties")
//@Import(TestConfig.class)
public class ApplicationConfig {
}

@Bean

作用:用于把当前方法的返回值作为bean对象存入spring的容器中

属性:name:用于指定bean的id。当不写时,默认值是当前方法的名称

@Bean
public IUserDao dao(){
    return new UserDaoImp();
}
 
@Bean
public IUserService service(/*@Autowired*/ IUserDao dao){
return new UserServiceImp(dao);
}
 
@Bean
public IUserController controller(/*@Autowired*/ IUserService service){
return new UserControllerImp(service);
}

@Import

作用:用于导入其他的配置类

属性:value:用于指定其他配置类的字节码。

例子:@Import(SystemSpringConfig.class)

@Import(TestConfig.class)
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值