基于注解的Bean装配

1.首先我们要了解注解是什么

注解(annotation),是从jdk5.0引入的技术,它不但可以和注释(comment)一样对程序坐出解释,还可以被其他程序(如编译器等)通过反射机制(Reflection)读取,可以说,注解-反射是MyBatis与Spring等框架的基础。

那么Bean是什么

Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化)。Bean是一个被实例化、组装、并通过SpringIoC容器所管理的对象,对于开发者来说,使用Spring框架主要做两件事:开发Bean,配置Bean。

接下来,我们开始通过项目学习Bean。

2.创建Spring web项目Spring2_2。

3.我们可以在pom.xml配置项中<修改spring-framework.version>的版本号。

<spring-framework.version>4.3.16.RELEASE</spring-framework.version>

4.pom.xml新配置更新项目。右键项目->Maven->Update Project...->在弹出的窗口点击OK按钮。

5.创建cn.edu.lntu.domain包。

6.在domain包下创建实体类Book。在Book类中添加    

​    private String bookId;
​    private String bookName;
​    private Float bookPrice;

三个数据成员,并为它们生成相应的set和get方法,然后生成包含三个形参的构造函数。

在sts中,生成set和get方法的快捷方式是,右击代码区然后选择Source,不论是get和set方法,还是构造器(构造函数),这里都可以快捷创作。

代码:

package cn.edu.lntu.domain;

public class Book {
	private String bookId;
	private String bookName;
	private Float bookPrice;
	@Override
	public String toString() {
		return "Book [bookId=" + bookId + ", bookName = " + bookName + ", bookPrice = " + bookPrice +"] ";
	}
	public Book(String bookId, String bookName, Float bookPrice) {
		this.bookId = bookId;
		this.bookName = bookName;
		this.bookPrice = bookPrice;
		
	}
	public String getBookId() {
		return bookId;
	}
	public void setBookId(String bookId) {
		this.bookId = bookId;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public Float getBookPrice() {
		return bookPrice;
	}
	public void setBookPrice(Float bookPrice) {
		this.bookPrice = bookPrice;
	}
	
}

7.创建cn.edu.lntu.dao包。

8.在dao包下创建接口BookDao,并添加方法public List<Book> findBookList();,其中List类型选择java.util.List。

代码:

package cn.edu.lntu.dao;

import java.util.List;

import cn.edu.lntu.domain.Book;

public interface BookDao {
	public List<Book> findBookList();
}	

9.在dao包下创建BookDao实现类BookDaoImp,并加入@Repository(name="bookDao")注解,光标放到Repository,通过快捷键CTRL+SHIFT+M导包。

package cn.edu.lntu.dao;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import cn.edu.lntu.domain.Book;
@Repository("bookDao")
public class BookDaoImp implements BookDao {
	public List<Book> findBookList() {
		// TODO Auto-generated method stub
		System.out.println("————————调用 BookDaoImp1的findBoolList()方法————————");
		List<Book> bookList = new ArrayList<Book>();
		bookList.add(new Book("326201","Android应用开发实践教程",56.0f));
		bookList.add(new Book("326202","IT项目管理",42.0f));
		return bookList;
	}

}

10.创建cn.edu.lntu.service包。

11.在service包下创建接口BookService,并添加方法public List<Book> searchBooks();。

代码:

package cn.edu.lntu.service;

import java.util.List;

import cn.edu.lntu.domain.Book;

public interface BookService {
	public List<Book> searchBooks();
}

12.在service包下创建BookService实现类BookServiceImp,并加入@Service("bookService")注解。在类中定义BookDao类型的数据成员bookDao,并为其生成set方法。接下来给bookDao数据成员加上@Resource("bookDao")注解,表示该成员通过依赖注入实例化。

代码:

package cn.edu.lntu.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import cn.edu.lntu.dao.BookDao;
import cn.edu.lntu.domain.Book;
@Service("bookService")
public class BookServiceImp implements BookService {

	public List<Book> searchBooks() {
		// TODO Auto-generated method stub
		System.out.println("————————调用 BookService的searchBooks()方法————————");
		return bookDao.findBookList();
	}
	@Resource(name="bookDao")
	BookDao bookDao;
	//set和get方法
//	public BookDao getBookDao() {
//		return bookDao;
//	}
	public void setBookDao(BookDao bookDao) {
		this.bookDao = bookDao;
	}

}

13.创建cn.edu.lntu.controller包。

14.在controller包下创建控制器类BookController,并加入@Controller("bookController")注解。在类中定义BookService类型的数据成员bookService,并为其生成set方法。接下来给bookService数据成员加上@Resource(name="bookService")注解。

代码:

package cn.edu.lntu.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

import cn.edu.lntu.domain.Book;
import cn.edu.lntu.service.BookService;
@Controller("bookController")
public class BookController {

	@Resource(name="bookService")
	BookService bookService;
	public List<Book> findBookList(){
		System.out.println("————————调用 Book Controller的findBoolList()方法————————");
		return bookService.searchBooks();
		
	};
	
	//生成方法
//	public BookService getBookService() {
//		return bookService;
//	}

	public void setBookService(BookService bookService) {
		this.bookService = bookService;
	}
	
	
}

15.配置Bean。通过配置信息

​    <context:component-scan base-package="cn.edu.lntu.controller"/>
​    <context:component-scan base-package="cn.edu.lntu.service"/>
​    <context:component-scan base-package="cn.edu.lntu.dao"/>

 Spring工厂会扫描三个包内所有代码文件,并根据注解建立Bean及Bean之间的依赖关系。

16.在cn.edu.lntu包下创建主类SpringAnnotationTest。

代码:

package cn.edu.lntu;

import java.util.List;

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


import cn.edu.lntu.controller.BookController;
import cn.edu.lntu.domain.Book;

public class SpringAnnotationTest {

	public static void main(String[] args) {
		System.out.println("————————调用 main方法————————");
		//初始化Spring容器,加载配置文件
		//ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		@SuppressWarnings("resource")
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring/application-config.xml");
		//获取BookController实例
		BookController bookController = (BookController) applicationContext.getBean("bookController");
		//调用BookController中的findBookList()方法
		List<Book> bookList = bookController.findBookList();
		System.out.println(bookList);
	}
}

17.因为版本问题,可能会遇见输出结果出错的情况

为了解决这样的问题,我们需要在Book类中加入一个toString()函数

18.输出结果

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值