一个简单的范例,主要注意程序的输出,自然可以明白注解的应用
定义接口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属性值,比较两次输出的不同!"); } }
