介绍spring bean注解标识属性

关键代码:

@Autowired或@Autowired(required=false) // 自动查找bean
@Qualifier("userRepository") // 指定使用userRepository Bean
配置:
<context:component-scan 
    base-package="com.shuoeasy.test"
>
</context:component-scan>

详细:

UserController.java:

package com.shuoeasy.test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.shuoeasy.test.service.UserService;

// 表现层
@Controller
public class UserController {
	@Autowired
	private UserService userService;
	public void execute(){
		userService.add();
		System.out.println("UserController execute");
	}
}

UserService.java:

package com.shuoeasy.test.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import com.shuoeasy.test.repository.UserRepository;

// 业务层
@Service
public class UserService {
	private UserRepository userRepository;
	
	@Autowired
	@Qualifier("userRepository") // 指定使用userRepository Bean
	public void setUserRepository(UserRepository userRepository) {
		this.userRepository = userRepository;
	}
	
	// 注解下载参数里面
	public void setUserRepository2(@Qualifier("userRepository") UserRepository userRepository) {
		this.userRepository = userRepository;
	}
	
	public void add(){
		userRepository.save();
		System.out.println("UserService add");
	}
}

UserRepository.java:

package com.shuoeasy.test.repository;

public interface UserRepository {
	void save();
}

UserRepositoryImpl.java:

package com.shuoeasy.test.repository.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.shuoeasy.test.component.User;
import com.shuoeasy.test.repository.UserRepository;

// 持久化层(可以重写名称)
@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository{

	@Autowired(required=false)
	private User user;
	
	public void save() {
		System.out.println(user);
		System.out.println("UserRepositoryImpl save");
	}

}

bean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
	
	<!-- 指定Spring IOC 容器扫描的包
		base-package="com.shuoeasy.test": 引用的包路径
	 -->
	<context:component-scan 
		base-package="com.shuoeasy.test"
		 >
	</context:component-scan>
</beans>

Main.xml:

package com.shuoeasy.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.shuoeasy.test.component.User;
import com.shuoeasy.test.controller.UserController;
import com.shuoeasy.test.repository.UserRepository;
import com.shuoeasy.test.service.UserService;

public class Main {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
		
		// bean
		User user = (User) ctx.getBean("user");
		System.out.println("user->" + user);
		
		// 表现层
		UserController userContoller = (UserController)ctx.getBean("userController");
		userContoller.execute();
		
		// 业务层
		UserService userService = (UserService) ctx.getBean("userService");
		userService.add();
		
		// 持久层
		UserRepository userRepository = (UserRepository)ctx.getBean("userRepository");
		userRepository.save();
	}

}

输出:

user->User [id=0, name=null]

User [id=0, name=null]

UserRepositoryImpl save

UserService add

UserController execute

User [id=0, name=null]

UserRepositoryImpl save

UserService add

User [id=0, name=null]

UserRepositoryImpl save


你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。