千家信息网

Spring的注解怎么使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"Spring的注解怎么使用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Spr
千家信息网最后更新 2026年11月03日Spring的注解怎么使用

这篇"Spring的注解怎么使用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Spring的注解怎么使用"文章吧。

    非全注解开发

    1、第一组注解

    这组注解关于对象的实例化创建,在功能上都没有区别

    • @Component 使用在类上用于实例化Bean

    • @Controller 使用在web层类上用于实例化Bean

    • @Service 使用在service层类上用于实例化Bean

    • @Repository 使用在dao层类上用于实例化Bean

    接下来让我们从具体的代码分析,理解和掌握它们吧!

    先创建一个UserDao接口,随便写一个sayHello()方法

    public interface UserDao {    void sayHello();}

    然后写一个接口实现类UserDaoImpl类,实现接口的方法,输出"大家好,我是卷心菜~~"

    //@Repository(value = "userDao")public class UserDaoImpl implements UserDao {    @Override    public void sayHello() {        System.out.println("大家好,我是卷心菜~~");    }}

    分析: 在类上加上@Repository(value = "userDao")就表示把这个类的实例放进了spring容器中,value = "userDao"就相当于中的id属性值,我们使用注解的时候,就不需要在指定类的包路径了,因此省略了class属性值

    注意,使用非全注解开发,意味着要配置spring文件,与之前不同的是,我们要在配置文件中加上一个包扫描,才能让注解生效

                

    写一个测试代码:

    @Test    public void test4() {        ApplicationContext applicationContext =                new ClassPathXmlApplicationContext("applicationContext.xml");        UserService userService = applicationContext.getBean(UserService.class);        userService.sayHello();    }

    运行结果:

    2、第二组注解

    这一组注解的功能是属性注入,让我们写一个代码看看他们的使用方法

    • @Autowired

    • @Resource

    • @Qulifier:和@Autowired一起使用

    创建一个接口UserService,写一个方法sayHello()

    public interface UserService {    void sayHello();}

    创建一个接口实现类,实现其方法,我们在方法中调用UserDaoImpl类的方法,代码如下:

    //@Service(value = "userService")public class UserServiceImpl implements UserService {//        @Autowired    @Qualifier(value = "userDao")    private UserDao userDao;    //可以省略不写//    public void setUserDao(UserDao userDao) {//        this.userDao = userDao;//    }    @Override    public void sayHello() {        userDao.sayHello();    }}

    分析: 注解@Service(value = "userService")就不多说了,使用方法跟第一组注解相同,我们在类中引入了private UserDao userDao;,该如何注入属性呢?可以使用@Autowired+@Qualifier(value = "userDao"),其中的value属性值相当于中的ref属性值,可以开心的是,使用xml配置文件的方式,我们还要写属性对应的set方法,但是使用了注解后,就不需要写set方法了,是不是很方便呢?@Autowired+@Qualifier(value = "userDao")这两个注解可以替换为@Resource(name="userDao"),但是不建议使用;@Autowired+@Qualifier(value = "userDao")还可以替换为单独的@Autowired,表示的是根据类型注入属性,当有多个相同类型时,就会报错,谨慎使用哦

    3、第三组注解

    这一组注解的功能是字符串的注入,但是不单单是普通的字符串注入,让我们写一个代码看看它的使用方法

    • @Value:进行字符串的注入

    • @PropertySource:引入外部properties文件

    • @Bean:将方法的返回值注入spring容器中

    在UserServiceImp类中加入一下代码,使用@Value注解注入自己需要的字符串内容

    @Value("我是一棵卷心菜")    private String name;    public void print() {        System.out.println(name);    }

    写一个测试代码,检验效果:

      @Test    public void test4() {        ApplicationContext applicationContext =                new ClassPathXmlApplicationContext("applicationContext.xml");        UserServiceImpl userService = applicationContext.getBean(UserServiceImpl.class);        userService.print();    }

    运行结果:

    这只是@Value注解的一种使用方法,接下来看看它的另一种使用方式

    首先配置一个xml文件,用来配置Druid数据源,连接MySQL数据库,这里的内容在我的Spring专栏中讲解的非常清楚,不懂的小伙伴们可以去学习一下

                                                    

    在resources下配置一个jdbc.properties文件

    jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.username=rootjdbc.password=0315

    接着在UserServiceImp类的上面加上注解@PropertySource(value = {"classpath:jdbc.properties"}),spring配置文件中就可以不要了,一个注解就解决了,是不是很方便呢?

    需要注意的是,在@PropertySource注解中,通过进入源码发现,它的属性值是一个数组类型,这就表明,我们可以引入多个properties文件

    然后再UserServiceImp类中写一个方法,用来获取连接对象

    @Value("${jdbc.driver}")    private String driverClassName;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String username;    @Value("${jdbc.password}")    private String password;    @Bean("dataSource")    public DataSource getDataSource() {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName(driverClassName);        dataSource.setUrl(url);        dataSource.setUsername(username);        dataSource.setPassword(password);        return dataSource;    }

    分析: 我们用注解@Value把properties文件的值拿到,然后在方法中进行连接配置,注解@Bean把获取的对象放进spring容器中,方便以后的使用,它的属性值是相当于bean标签里面的id

    配置是否成功呢?我们来写一个测试代码:

      @Test    public void test5() throws SQLException {        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        DataSource dataSource = (DataSource) context.getBean("dataSource");        Connection connection = dataSource.getConnection();        System.out.println(connection);    }

    运行结果:

    到这里,我们发现spring配置文件中还多了一个包扫描,孤苦伶仃的;我们该能不能不使用配置文件呢?答案是肯定可以的,接下来就来看看完全注解开发

    完全注解开发

    1、第一组注解

    这三个注解不是很重要,了解即可

    • @Scope:决定对象是多例还是单例

    • @PostConstruct:标注初始化方法

    • @PreDestroy:标注销毁方法

    2、第二组注解

    这一组注解开始打开我们全注解开发的大门

    • @Configuration 用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解

    • @ComponentScan 用于指定 Spring 在初始化容器时要扫描的包。

    • @PropertySource 用于加载.properties 文件中的配置

    • @Import 用于导入其他配置类

    使用全注解开发,我们首先创建一个主类SpringConfig

    @Configuration//@ComponentScan(value = {"com.sht"})public class SpringConfig {    private int age = 18;    public void print() {        System.out.println("我的年龄是" + age + "岁");    }}

    分析: @Configuration告诉spring这是一个配置类,@ComponentScan的属性值要填写包扫描的路径,它的功能跟一样,到了这里,我们就可以完全的不需要spring配置文件了

    接下来用代码测试一下:

    @Test    public void test6() {        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);        SpringConfig config = context.getBean(SpringConfig.class);        config.print();    }

    运行结果:

    那么问题又来了,如果我有别的配置类,如何将它们放进spring容器里面呢?这时候就需要用到@Import注解了

    上面内容中,我在UserServiceImp类中写一个方法,用来获取连接对象,我现在把它们写在一个UtilGetDataSource类中,代码如下:

    @PropertySource(value = {"classpath:jdbc.properties"})public class UtilGetDataSource {    @Value("${jdbc.driver}")    private String driverClassName;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String username;    @Value("${jdbc.password}")    private String password;    @Bean("dataSource")    public DataSource getDataSource() {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName(driverClassName);        dataSource.setUrl(url);        dataSource.setUsername(username);        dataSource.setPassword(password);        return dataSource;    }}

    我们要想使用这个方法,就需要把它放进spring容器中;用@Import注解,它的属性值也是一个数组类型的,可以引入多个类

    @Import(UtilGetDataSource.class)public class SpringConfig{ }

    最后写个测试类看看是否正确

    @Test    public void test6() throws SQLException {        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);        DataSource dataSource = (DataSource) context.getBean("dataSource");        Connection connection = dataSource.getConnection();        System.out.println(connection);    }

    运行结果:

    以上就是关于"Spring的注解怎么使用"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

    注解 方法 配置 文件 属性 代码 内容 容器 实例 开发 对象 接口 结果 分析 测试 运行 接下来 使用方法 功能 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 互联网科技活动banner 深圳恒合互联网络科技有限公司 互联网科技资迅 金融科技 互联网金融 滨湖区互联网智能科技产品供应 哈尔滨秒房互联网科技有限公司 团飞科技与伯堂互联网服务平台 互联网企业和科技型企业 金融科技与互联网金融相同和不同 互联网科技有哪些公司 南平创想时代互联网科技有限公司 中国航天科技大学国际工业互联网 互联网科技大奖都有哪些公司 迪庆互联网科技招生 互联网行业科技股 2021互联网科技公司排名 山东星卡互联网科技有限公司官网 珠海东科互联网科技有限公司 张家口科技产业互联网平台 美国互联网科技 善班互联网科技有限公司 赶超互联网科技 微信多开 互联网媒体平台算高科技产业 科技大学互联网 黑科技 体验场景 互联网大会 互联网科技资金流入 互联网科技股为什么大涨 互联网科技数字货币 宁波允成互联网科技有限公司
    0