相关推荐recommended
【Spring】注解实现IOC操作,你理解了吗?
作者:mmseoamin日期:2024-02-20

作者:狮子也疯狂

专栏:《spring开发》

坚持做好每一步,幸运之神自然会驾凌在你的身上

【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第1张

专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大
家支持一下。

专栏名字
Elasticsearch专栏es
spring专栏spring开发
redis专栏redis学习笔记
项目专栏项目集锦
修bug专栏bug修理厂

目录

  • 一.🦁 前言
  • 二.🦁 注解实现配置
    • Ⅰ.🐇 准备工作
    • Ⅱ.🐇 注解实现IOC
      • 2.1 @Component
        • 2.1.1 作用
        • 2.1.2 对比与使用
        • 2.2 @Repository、@Service、@Controller
          • 2.2.1 作用
          • 2.2.2 使用
          • 2.3 @Scope
            • 2.3.1 作用
            • 2.3.2 使用
            • 2.4 @Autowired
              • 2.4.1 作用
              • 2.4.2 使用
              • 2.5 @Value
                • 2.5.1 作用
                • 2.5.2 用法
                • 2.6 @Configuration
                  • 2.6.1 作用
                  • 2.6.2 用法
                  • 2.7 @PropertySource
                    • 2.7.1 作用
                    • 2.7.2 用法
                    • 2.8 @Bean
                      • 2.8.1 作用
                      • 2.8.2 用法
                      • 三.🦁 总结

                        一.🦁 前言

                        前面讲解了IOC的基本概念以及操作演示,但是spring配置文件较多,操作起来相对麻烦。今天我们使用注解来操作实现IOC的功能。

                        二.🦁 注解实现配置

                        注解配置和xml配置对于Spring的IOC要实现的功能都是一样的,只是配置的形式不一样。

                        Ⅰ.🐇 准备工作

                        • 创建一个新的Spring项目。
                        • 编写pojo,dao,service类。
                        • 编写空的配置文件

                          需要用到的连接数据库等配置都已经配置完成。

                        如果想让该文件支持注解,需要添加新的约束头,如下:

                        
                        
                        
                        

                        Ⅱ.🐇 注解实现IOC

                        2.1 @Component

                        【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第2张

                        2.1.1 作用

                        作用:用于创建对象,放入Spring容器,相当于 < bean id="" >

                        位置:类上方

                        tips:

                        1.要在配置文件中配置扫描的包,扫描到该注解才能生效。

                        2.@Component 注解配置bean的默认id是首字母小写的类名。也可以手动设置bean的id值。

                        2.1.2 对比与使用

                        eg1:

                         @Component
                        public class StudentDaoImpl implements StudentDao{
                          public Student findById(int id) {
                           // 模拟根据id查询学生
                          return new Student(1,"Jackie","茂名");
                        	}
                        }
                        

                        eg2:

                        @Component("studentDao")
                        public class StudentDaoImpl implements StudentDao{
                            public Student findById(int id) {
                                // 模拟根据id查询学生
                                return new Student(1,"java","茂名");
                           }
                        }
                        

                        此时eg1 bean的id为studentDaoImpl

                        此时eg2 bean的id为studentDao

                        2.2 @Repository、@Service、@Controller

                        【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第3张

                        2.2.1 作用

                        作用:这三个注解和@Component的作用一样,使用它们是为了区分该类属于什么层。

                        位置:

                        • @Repository用于Dao层
                        • @Service用于Service层
                        • @Controller用于Controller层
                        2.2.2 使用
                        @Repository
                        public class StudentDaoImpl implements StudentDao{}
                        @Service
                        public class StudentService {}
                        

                        2.3 @Scope

                        2.3.1 作用

                        作用:指定bean的创建策略

                        位置:类上方

                        取值:singleton prototype request session globalsession

                        【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第4张

                        2.3.2 使用
                        @Service
                        @Scope("singleton")
                        public class StudentService {}
                        

                        2.4 @Autowired

                        2.4.1 作用

                        作用:从容器中查找符合属性类型的对象自动注入属性中。用于代替 < bean > 中的依赖注入配置。

                        【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第5张

                        位置:属性上方、setter方法上方、构造方法上方。

                        2.4.2 使用

                        eg1:

                        @Autowired 写在属性上方进行依赖注入时,可以省略setter方法。

                        @Component
                        public class StudentService {
                          @Autowired
                          private StudentDao studentDao;
                          public Student findStudentById(int id){
                            return studentDao.findById(id);
                           }
                        }
                        @Test
                        public void t2(){
                          ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
                          StudentService studentService = (StudentService) ac.getBean("studentService");
                          System.out.println(studentService.findStudentById(1));
                        }
                        

                        eg2:容器中没有对应类型的对象会报错

                        // 如果StudentDaoImpl没有放到容器中会报错
                        //@Component("studentDao")
                        public class StudentDaoImpl implements StudentDao{
                          public Student findById(int id) {
                            // 模拟根据id查询学生
                            return new Student(1,"Jackie","茂名");
                           }
                        }
                        

                        eg3:容器中有多个对象匹配类型时,会找beanId等于属性名的对象,找不 到会报错。

                        // 如果容器中都多个同类型对象,会根据id值等于属性名找对象
                        @Component("studentDao")
                        public class StudentDaoImpl implements StudentDao{
                          public Student findById(int id) {
                            // 模拟根据id查询学生
                            return new Student(1,"Jackie","茂名");
                           }
                        }
                        @Component
                        public class StudentDaoImpl implements StudentDao{
                          public Student findById(int id) {
                            // 模拟根据id查询学生
                            return new Student(1,"Jackie","茂名");
                           }
                        }
                        

                        2.5 @Value

                        2.5.1 作用

                        作用:注入String类型和基本数据类型的属性值。

                        【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第6张

                        位置:属性上方

                        2.5.2 用法

                        eg1:直接设置固定的属性值

                        @Service
                        public class StudentService {
                          @Value("1")
                          private int count;
                          
                          @Value("hello")
                          private String str;
                        }
                        

                        eg2:获取配置文件中的属性值

                        1. 编写配置文件db.properties
                        jdbc.username=root
                        jdbc.password=123456
                        
                        1. spring核心配置文件扫描配置文件
                        
                        
                        
                        1. 注入配置文件中的属性值
                        @Value("${jdbc.username}")
                        private String username;
                        @Value("${jdbc.password}")
                        private String password;
                        

                        2.6 @Configuration

                        2.6.1 作用

                        作用:纯注解实现IOC需要一个Java类代替xml文件。这个Java类上方需要添 加@Configuration,表示该类是一个配置类,作用是代替配置文件。

                        位置:配置类上方

                        tips:

                        @Configuration 一般配合@ComponentScan(指定spring在初始化容器时扫描的包)使用。

                        2.6.2 用法

                        eg1:

                        @Configuration
                        @ComponentScan("com.jackie")
                        public class SpringConfig {
                        }
                        

                        2.7 @PropertySource

                        2.7.1 作用

                        作用:代替配置文件中的 context:property-placeholder 扫描配置文件

                        位置:配置类上方

                        注意:配置文件位置前要加关键字 classpath

                        2.7.2 用法
                        @Configuration
                        @PropertySource("classpath:db.properties")
                        public class JdbcConfig {
                            @Value("${jdbc.username}")
                            private String username;
                            @Value("${jdbc.password}")
                            private String password;
                        }
                        

                        2.8 @Bean

                        2.8.1 作用

                        作用:将方法的返回值对象放入Spring容器中。如果想将第三方类的对象放入容器,可以 使用@Bean

                        【Spring】注解实现IOC操作,你理解了吗?,在这里插入图片描述,第7张

                        位置:配置类的方法上方。

                        属性:name:给bean对象设置id

                        tips:@Bean修饰的方法如果有参数,spring会根据参数类型从容器中查找可用对象。

                        2.8.2 用法

                        eg1:

                        如果想将jdbc连接对象放入Spring容器,因为我们无法修改Connection源码,所以无法添加@Component将其放到spring容器中,此时就需要使用将@Bean该对象放入Spring容器

                        将Connection对象放入Spring容器:

                        @Bean(name = "connection")
                        public Connection getConnection(){
                            try {
                              
                        		Class.forName("com.mysql.cj.jdbc.Driver");
                                return DriverManager.getConnection("jdbc:mysql:///mysql", "root", "root");
                           		}catch (Exception e) {
                                return null;
                           	}
                        }
                        

                        三.🦁 总结

                        基于注解式开发spring,相对来说比较少,但是理解这些注解的作用,会对后面学习spring boot产生比较大的影响。所以还是应该重视一下,多用多做就能掌握啦。今天的分享到此结束,我是狮子,希望可以帮到您。