spring常用注解使用1

博客介绍了Spring相关配置,包括applicationContext.xml开启扫描、bean创建注解、存活范围、生命周期、数据注入等,对比了@Resource和@Autowired的功能与区别。还提到基于类的注解配置、导入外部配置文件注解,最后讲解了Spring中集成JUnit单元测试的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

applicationContext.xml 开启扫描

<context:component-scan base-package="扫描的包及其子包"/>

bean的创建有关注解

@Component spring容器会实例化当前带有该注解的类,并以指定的名称存放到容器中。
如果没有指定的名称,默认是当前类的首字母小写。
@Controller 表现层
@Service    业务层
@Repository 持久层

bean的存活范围

@Scope:  @Scope("prototype")多例 / singleton单例 

bean的生命周期

@PostConstruct //创建对象之后执行的初始化方法
@PreDestroy//销毁之前执行的方法

数据注入

@Autowired
​
==用法一:setter注入==
带有setter或者构造器的方法,加上注解,会有Spring容器调用。
例如:
(1)
@Repository("aaa")
@Scope("singleton")
public class AccountDaoImpl implements IAccountDao {
    public void saveAccount() {
        System.out.println("accountdao实现类方法");
    }
}
(2)
@Service
public class AccountServiceImpl implements AccountService {
​
    private IAccountDao accountDao;
    @Autowired
    public void setAccountDao(@Qualifier("aaa") IAccountDao accountDao) {
        this.accountDao = accountDao;
    }
如果方法中有参数,先按照参数的类型去spring容器中找对象,找到传递进来。
=如果在spring容器中有多个匹配的类型,按照参数的名称去找。
=如果有多个类型匹配,并且spring容器中的对象和参数名都不一致,可以使用@Qualifier配合@Autowired来确定具体的制定对象。
​
==用法二:构造器注入==
​
例如:
@Service
public class AccountServiceImpl implements AccountService {
​
    private IAccountDao accountDao;
​
    @Autowired
    public AccountServiceImpl(IAccountDao accountDao) {
        this.accountDao = accountDao;
    }
和setter注入的方式一样
​
​
==用法三(重点):私有字段注入==
​
例如:
public class AccountServiceImpl implements AccountService {
    @Autowired
    @Qualifier("aaa")
    private IAccountDao accountDao;
    
​
spring容器调用,按照类型去spring容器找对象,找到了赋值。
            =找到多个相同类型的,按照字段名称去找
            =还可以配合@Qualifier制定具体对象

插入

@Resource

功能和@Autowired完全一致,注入对象;

区别:1、

@Resource是JDK中的类,spring对其进行了支持;

@Autowired是spring的类(推荐)

2、

@Resource先按照名称查找;找不到再按照类型查找;@Autowired先按照类型查找;找不到再按照名称查找

 

 

扩展 基于类的注解配置

@ComponentScan("com.zzk")----//指定要扫描的包--》<context:component-scan base-package="com.zzk"/>
@Bean    //功能和@Autowired类似,被spring容器调用。
        //当方法有参数时,按照参数类型注入参数
        =如果找到多个参数,按照参数的名称找对象
        =方法的返回值,会交给spring容器管理。默认名称为当前方法名
        //可以通过@Bean("")来指定存放到spring容器中的名称 
        
例如:
    @Bean
    public DataSource createDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUrl("jdbc:mysql:///class");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("root");
        return druidDataSource;
    }
相当于配置文件中的————————
    *   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
     *         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     *         <property name="url" value="jdbc:mysql:///class"/>
     *         <property name="username" value="root"/>
     *         <property name="password" value="root"/>
     *     </bean>
测试类的使用时,注意使用纯注解的容器
AnnotationConfigApplicationContext(类.class)
@Import(jdbcConfig.class)
多个配置类 引入其他配置类@Import

导入外部配置文件的注解

1准备外部文件

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///class
jdbc.user=root
jdbc.password=root

2添加注解 类上

@PropertySource("jdbc.properties")   //引入外部配置

3引入key对应的值

@Value("${jdbc.driverClass}")
private String driverClass;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.user}")
private String user;
@Value("${jdbc.password}")
private String password;

spring中集成junit单元测试

1导入依赖要求4.12+

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>5.1.5.RELEASE</version>

</dependency>

2类上加注解

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfig.class}/locations = {"classpath*:/*.xml"})----》来标注我们想要导入这个测试类的某些bean
 @Autowired
    private IAccountService iAccountService;------》容器注入使用IAccountService已经在容器中了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慢慢CG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值