【Spring】的【Bean】管理(注解)【四个相同功能的注解】

【Spring】的【Bean】管理(注解)【四个相同功能的注解】

  • 注解:代码里面特殊的标记,使用注解也可以完成一些相关的功能。
  • 注解写法:@注解名称(属性名称=属性值)
  • 注解使用在类、方法、属性上面

  (注解可以替代配置文件,并非完全替代):

  1.创建类,创建方法

1 public class User {
2     public void add(){
3         System.out.println("add-----------");
4     }
5 }

  2.创建spring配置文件,引入约束

1 <beans xmlns="http://www.springframework.org/schema/beans"
2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3     xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
4         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
5         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
6 </beans>

  3.配置开启注解扫描

 1 <!--
 2         开启注解扫描功能
 3         (1)到包里面扫描类、方法、属性上面是否有注解
 4      -->
 5     <context:component-scan base-package="com.anno"></context:component-scan>
 6
 7
 8
 9 <!-- 只会扫描属性上面的注解,所以我们不用 -->
10     <context:annotation-config></context:annotation-config>

一、 使用注解创建对象

在创建对象的类上面使用注解实现

1 @Component(value="user")    //<bean id="" class="">
2 public class User {
3     public void add(){
4         System.out.println("add-----------");
5     }
6 }

写测试代码

1 @Test
2     public void testAno(){
3         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
4         User user = (User)applicationContext.getBean("user");
5         user.add();
6     }

   创建对象有四个注解,下面还有三个:


Spring中提供了@Component的三个衍生注解:(功能目前来说是一致的,都是用来创建对象)


@Controller


Web层


@Service


业务层


@Repository


持久层


这三个注解是为了让标注类本身用途清晰,spring在后续的版本中会对其增强。

  创建对象单实例还是多实例  在类上面添加注解@scope

1 @Component(value="user")    //<bean id="" class="">
2 @Scope(value="prototype")
3 public class User {
4     public void add(){
5         System.out.println("add-----------");
6     }
7 }

二、使用注解注入属性

第一种注解(很少用):@Autowired

需求:创建service类,创建dao类,在service得到dao对象

1 @Component(value="userdao")
2 public class UserDao {
3     public void add(){
4         System.out.println("dao--------------add");
5     }
6 }
@Service(value="userservice")
public class UserService {
    //得到dao对象
    //1定义dao类型属性
    //在dao属性上面使用注解完成对象注入 autowired代表自动装配/注入,注意这里的private UserDao userdao自动注入是根据类名注入的,和UserDao里面的注入对象没有任何关系
    @Autowired
    private UserDao userdao;
    //使用注解方式不需要set方法
    public void add(){
        System.out.println("service------------add");
        userdao.add();
    }
}
1 @Test
2     public void testService(){
3         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
4         UserService userService = (UserService)applicationContext.getBean("userservice");
5         userService.add();
6     }

第二种注解(经常用,因为能够准确注入)@Resource:

 1 @Service(value="userservice")
 2 public class UserService {
 3     //得到dao对象
 4     //1定义dao类型属性
 5     //2在dao属性上面使用注解完成对象注入 autowired代表自动装配
 6     //@Autowired
 7     //name属性值写注解创建的dao对象value值
 8     @Resource(name="userdao")
 9     private UserDao userdao;
10     //使用注解方式不需要set方法
11     public void add(){
12         System.out.println("service------------add");
13         userdao.add();
14     }
15 }

三、xml和注解方式混合使用

1、创建对象的操作使用配置文件方式实现;

1 public class BookDao {
2     public void book(){
3         System.out.println("book dao-----------");
4     }
5 }
1 public class OrderDao {
2     public void order(){
3         System.out.println("order dao-----------");
4     }
5 }
 1 public class BookService {
 2     //得到bookdao和orderdao对象
 3     @Resource(name="bookDao")
 4     private BookDao bookdao;
 5     @Resource(name="orderDao")
 6     private OrderDao orderdao;
 7
 8     public void add(){
 9         System.out.println("bookservice");
10         bookdao.book();
11         orderdao.order();
12     }
13 }

配置文件

1 <!-- 配置对象 -->
2     <bean id="bookService" class="com.xmlanno.BookService"></bean>
3     <bean id="bookDao" class="com.xmlanno.BookDao"></bean>
4     <bean id="orderDao" class="com.xmlanno.OrderDao"></bean>

2、注入属性的操作使用注解实现

1 //得到bookdao和orderdao对象
2     @Resource(name="bookDao")
3     private BookDao bookdao;
4     @Resource(name="orderDao")
5     private OrderDao orderdao;
时间: 2024-10-16 02:34:51

【Spring】的【Bean】管理(注解)【四个相同功能的注解】的相关文章

spring的bean管理(注解方式)

1.Spring的Bean管理的中常用的注解 @Component:组件.(作用在类上) public interface UserDao {     public void sayHello(); }   @Component(value="userDao")     public class UserDaoImpl implements UserDao {   @Override public void sayHello() {     System.out.println(&qu

Spring的Bean管理(注解管理)

Spring注解的IOC入门步骤: 步骤一:下载spring的开发包 http://repo.spring.io/webapp/search/artifact/?0&q=spring-framework 解压:(Spring目录结构:) * docs:API和开发规范. * libs:jar包和源码. * schema:约束. 步骤二:创建Web项目,引入spring开发jar包 核心jar包四个:bean/Core/Context/Expression Language 两个开发包 : log

Spring的bean管理(注解)

前端时间总是用配置文件  内容太多 下面认识一下注解 注解是什么? 1代码里面的特殊标记,使用注解可以完成功能 2注解写法@XXX 3使用注解可以少些很多配置文件 Spring注解开发准备 注解创建准备 1导入Spring的jar包 2创建类 public class User{ public void add(){ System.out.print("add") } } 3创建Spring配置文件 引入约束 开启注解扫描 到包里面扫描类 ,方法,属性上是否有注解 <contex

Spring框架bean的配置(3):基于注解的配置,Autowired 自动装配 Bean,泛型依赖注入

1.基于注解的配置: @Component: 基本注解, 标识了一个受 Spring 管理的组件 @Respository: 标识持久层组件 @Service: 标识服务层(业务层)组件 @Controller: 标识表现层组件 建立接口:UserRepository package com.atguigu.spring.beans.annotation.test; public interface UserRepository { void save(); } 建立类:UserReposito

spring的bean管理

1.所有的类都可以交给Spring管理 2.如何把一个类交给bean管理? (1)配置applicationContext.xml (2)在xml中写入bean节点配置要交给bean管理的类 3.程序测试 (1)导入spring core container的jar包,spring核心包含以下包: (2)新建applicationContext.xml文件,这个文件要放在src文件夹下边,要不然找不到文件,配置根节点beans,并指定命名空间: <?xml version="1.0&quo

Spring的bean管理(注解)——2017.08.26

1  注解是什么?代码里面的特殊标记,使用注解可以完成功能 注解写法:@注解名称(属性名称=属性值) 注解的地方:类上面,方法上面和属性上面 //类对象上创建对象 @Component(value="user")@Scope(value="prototype") public class User { public void add() { System.out.println("add..."); } } 创建对象有四个注解1 @Compone

java之Spring装配Bean(手动装配、自动装配、注解装配)

在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 1 <bean id="todo" class="com.eco.daoimp.Usertodo1"></bean> 2 3 <!--定义Userservice类内部接口的引用(userdao)指向具体的实现类对象(Usertodo1) --> 4 <bean id="userse

Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效)

今天在使用Spring cache的Cacheable注解的过程中遇见了一个Cacheable注解失效的问题,检查问题发生的原因是因为Spring的Cacheable注解是基于Spring AOP实现的,但是类内部方法互相调用时不会被Spring AOP拦截的,所以导致被调用方法的Cacheable注解失效,特此记录. 问题复现 @Service public class UserServiceImpl{ @Override public User detail(Long id) { // 校验

spring统一日志管理,切面(@Aspect),注解式日志管理

step1 开启切面编程 <!-- 开启切面编程(通过配置织入@Aspectj切面 ) --> <aop:aspectj-autoproxy/> <aop:aspectj-autoproxy />有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强,当配为<aop:aspectj-autoproxy poxy-target-class="true"/>时,表示使用CGLib动态代理技术织入增强.