好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java Spring-IOC容器与Bean管理之基于注解的方式案例详解

Spring-IOC容器-Bean管理-基于注解方式

什么是注解?

(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)

(2)使用注解,注解作用在类上面,方法上面,属性上面

(3)使用注解目的:简化 xml 配置

Spring 针对 Bean 管理中创建对象提供注解

下面四个注解功能是一样的,都可以用来创建 bean 实例

(1)@Component

(2)@Service

(3)@Controller

(4)@Repository

基于注解方式实现对象创建

①引入依赖(引入spring-aop jar包)

②开启组件扫描

?

1

2

3

4

5

<!--开启组件扫描

  1 如果扫描多个包,多个包使用逗号隔开

  2 扫描包上层目录

-->

< context:component-scan base-package = "com.atguigu" ></ context:component-scan >

③创建类,在类上面添加创建对象注解

?

1

2

3

4

5

6

7

8

9

//在注解里面 value 属性值可以省略不写,

//默认值是类名称,首字母小写

//UserService -- userService

@Component (value = "userService" ) //注解等同于XML配置文件:<bean id="userService" class=".."/>

public class UserService {

      public void add() {

         System.out.println( "service add......." );

      }

}

开启组件扫描细节配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<!--示例 1

  use-default-filters="false" 表示现在不使用默认 filter,自己配置 filter

  context:include-filter ,设置扫描哪些内容

-->

< context:component-scan base-package = "com.atguigu" use-defaultfilters = "false" >

  < context:include-filter type = "annotation"

 

expression = "org.springframework.stereotype.Controller" /> <!--代表只扫描Controller注解的类-->

</ context:component-scan >

<!--示例 2

  下面配置扫描包所有内容

  context:exclude-filter: 设置哪些内容不进行扫描

-->

< context:component-scan base-package = "com.atguigu" >

  < context:exclude-filter type = "annotation"

 

expression = "org.springframework.stereotype.Controller" /> <!--表示Controller注解的类之外一切都进行扫描-->

</ context:component-scan >

基于注解方式实现属性注入

① @Autowired:根据属性类型进行自动装配

(1)第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解。

(2)第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

@Service

public class UserService {

  //定义 dao 类型属性

  //不需要添加 set 方法

  //添加注入属性注解

  @Autowired

  private UserDao userDao;

  public void add() {

  System.out.println( "service add......." );

  userDao.add();

  }

}

 

//Dao实现类

@Repository

//@Repository(value = "userDaoImpl1")

public class UserDaoImpl implements UserDao {

     @Override

     public void add() {

         System.out.println( "dao add....." );

     }

}

② @Qualifier:根据名称进行注入,这个@Qualifier 注解的使用,和上面@Autowired 一起使用

?

1

2

3

4

5

6

7

//定义 dao 类型属性

//不需要添加 set 方法

//添加注入属性注解

@Autowired //根据类型进行注入

//根据名称进行注入(目的在于区别同一接口下有多个实现类,根据类型就无法选择,从而出错!)

@Qualifier (value = "userDaoImpl1" )

private UserDao userDao;

③ @Resource:可以根据类型注入,也可以根据名称注入(它属于javax包下的注解,不推荐使用!)

?

1

2

3

//@Resource //根据类型进行注入

@Resource (name = "userDaoImpl1" ) //根据名称进行注入

private UserDao userDao;

④ @Value:注入普通类型属性

?

1

2

@Value (value = "abc" )

private String name

完全注解开发

(1)创建配置类,替代 xml 配置文件

?

1

2

3

4

5

@Configuration //作为配置类,替代 xml 配置文件

@ComponentScan (basePackages = { "com.atguigu" })

public class SpringConfig {

    

}

(2)编写测试类

?

1

2

3

4

5

6

7

8

9

10

@Test

public void testService2() {

  //加载配置类

  ApplicationContext context

  = new AnnotationConfigApplicationContext(SpringConfig. class );

  UserService userService = context.getBean( "userService" ,

UserService. class );

  System.out.println(userService);

  userService.add();

}

到此这篇关于 Java Spring-IOC容器与Bean管理之基于注解的方式案例详解的文章就介绍到这了,更多相关Java Spring-IOC容器与Bean管理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/qq_45966440/article/details/119986929

查看更多关于Java Spring-IOC容器与Bean管理之基于注解的方式案例详解的详细内容...

  阅读:14次