一个简单的范例,主要注意程序的输出,自然可以明白注解的应用
- 定义接口
package org.study.spring.dao;
import java.util.List;
public interface MovieDao {
public List<String> findAll();
}
- 实现接口
package org.study.spring.dao.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
import org.study.spring.dao.MovieDao;
//Spring默认采用单例模式,采用prototype属性,每次调用都创建对象
@Scope("singleton")
@Repository(value = "movieImpl")
public class MovieInMemeryDaoImpl implements MovieDao {
List<String> movies = null;
public List<String> findAll() {
movies = new ArrayList<String>();
movies.add("风吹稻浪");
movies.add("冈萨雷斯凭");
movies.add("岁月");
return movies;
}
}
- Service实现
package org.study.spring.service;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.study.spring.dao.MovieDao;
/**
* @Repository、@Service和 @Controller则是@Component的细化,
* 用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。
* 也就是说,你能用@Component来注解你的组件类, 但如果用@Repository、@Service
* 或@Controller来注解它们,你的类也许能更好地被工具处理,或与切面进行关联。
*
* @author Administrator 默认为类名首字母小写,通过value属性可自定义Bean的标识
*
*/
@Scope("prototype")
@Service(value = "sms")
public class SimpleMovieService {
static int i = 0;
private MovieDao movieFinder;
// @Autowired 自动进行注入,但须在spring配置文件中进行配置,并保证唯一性
@Autowired
public SimpleMovieService(MovieDao movieFinder) {
i++;
System.out.println("创建对象个数:" + i);
this.movieFinder = movieFinder;
}
public void printFindedMovie() {
List<String> movies = movieFinder.findAll();
System.out.println(Arrays.deepToString(movies.toArray()));
}
}
- 客户端
package org.study.spring;
import java.util.Arrays;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.study.spring.service.SimpleMovieService;
public class MainApp {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("ctx.xml");
String[] beanNames = ctx.getBeanDefinitionNames();
System.out
.println("Spring中的定义的Bean有:" + Arrays.deepToString(beanNames));
System.out.print("找到的电影有:");
SimpleMovieService simpleBean1 = (SimpleMovieService) ctx
.getBean("sms");
simpleBean1.printFindedMovie();
SimpleMovieService simpleBean2 = (SimpleMovieService) ctx
.getBean("sms");
simpleBean2.printFindedMovie();
System.out.println("修改@Scope属性值,比较两次输出的不同!");
}
}